From: Ted Kremenek Date: Wed, 18 Feb 2009 22:11:23 +0000 (+0000) Subject: Add a few more GC-only test cases for the retain/release checker. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b2b14d772aea2c5b96df22a120cfcd7f8039697a;p=clang Add a few more GC-only test cases for the retain/release checker. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64960 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Analysis/retain-release-gc-only.m b/test/Analysis/retain-release-gc-only.m index 32a9c877ac..231eec9aa6 100644 --- a/test/Analysis/retain-release-gc-only.m +++ b/test/Analysis/retain-release-gc-only.m @@ -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); }