diff options
-rw-r--r-- | test/Analysis/retain-release.mm | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/Analysis/retain-release.mm b/test/Analysis/retain-release.mm index 8c707acfc3..0b550a8e0f 100644 --- a/test/Analysis/retain-release.mm +++ b/test/Analysis/retain-release.mm @@ -321,3 +321,29 @@ void test_Scopy() { NSString *token = (NSString*) Scopy(); [token release]; // expected-warning {{object that is not owned}} } + +//===----------------------------------------------------------------------===// +// Test handling of template functions used to do magic with +// tracked retained pointers. +//===----------------------------------------------------------------------===// + +template <typename T, typename U> T static_objc_cast(U* value) +{ + // ...debugging code omitted... + return static_cast<T>(value); +} + +int rdar10553686(void) +{ + NSObject* bar = static_objc_cast<NSObject*>([[NSObject alloc] init]); + [bar release]; + return 0; +} +int rdar10553686_positive(void) +{ + NSObject* bar = static_objc_cast<NSObject*>([[NSObject alloc] init]); // expected-warning {{Potential leak}} + [bar release]; + [bar retain]; + return 0; +} + |