]> granicus.if.org Git - clang/commitdiff
Add a few more GC-only test cases for the retain/release checker.
authorTed Kremenek <kremenek@apple.com>
Wed, 18 Feb 2009 22:11:23 +0000 (22:11 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 18 Feb 2009 22:11:23 +0000 (22:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64960 91177308-0d34-0410-b5e6-96231b3b80d8

test/Analysis/retain-release-gc-only.m

index 32a9c877ac100d06310456192735fb6b03a51685..231eec9aa69260aabb22c37c8e271704d80684d6 100644 (file)
@@ -13,6 +13,7 @@ typedef const struct __CFAllocator * CFAllocatorRef;
 extern const CFAllocatorRef kCFAllocatorDefault;
 extern CFTypeRef CFRetain(CFTypeRef cf);
 extern void CFRelease(CFTypeRef cf);
+CFTypeRef CFMakeCollectable(CFTypeRef cf);
 typedef struct {
 }
   CFArrayCallBacks;
@@ -75,7 +76,20 @@ extern DADissenterRef DADissenterCreate( CFAllocatorRef allocator, DAReturn stat
 //===----------------------------------------------------------------------===//
 
 void f1() {
-  CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks);
+  CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning
   id x = [(id) A autorelease];
-  CFRelease((CFMutableArrayRef) x); // no-warning
+  CFRelease((CFMutableArrayRef) x);
+}
+
+void f2() {
+  CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}}
+  id x = [(id) A retain];
+  [x release];
+  [x release];
+}
+
+void f3() {
+  CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}}
+  CFMakeCollectable(A);
+  CFRetain(A);
 }