]> granicus.if.org Git - clang/commitdiff
Add test case for <rdar://problem/10553686>, which illustrates RetainCount checker...
authorTed Kremenek <kremenek@apple.com>
Tue, 20 Mar 2012 00:10:35 +0000 (00:10 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 20 Mar 2012 00:10:35 +0000 (00:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153069 91177308-0d34-0410-b5e6-96231b3b80d8

test/Analysis/retain-release.mm

index 8c707acfc33c987e0ccc28050b4c6c6334111da3..0b550a8e0f09d95d87d5b5f55764b3a5e518491c 100644 (file)
@@ -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;
+}
+