diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-06-03 19:19:06 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-06-03 19:19:06 +0000 |
commit | 2d22c84b4a30882d74dd8fce3eebe8ed4e3cb0ee (patch) | |
tree | fbd71e4c9a545c141dc445dd772e989a2029d1b5 | |
parent | c380cca7aeaaa6c409c9ef0a902be0ade2392995 (diff) | |
download | bcm5719-llvm-2d22c84b4a30882d74dd8fce3eebe8ed4e3cb0ee.tar.gz bcm5719-llvm-2d22c84b4a30882d74dd8fce3eebe8ed4e3cb0ee.zip |
Add more retain-checker tests for GC mode when using NSMakeCollectable.
llvm-svn: 72799
-rw-r--r-- | clang/test/Analysis/retain-release-gc-only.m | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/clang/test/Analysis/retain-release-gc-only.m b/clang/test/Analysis/retain-release-gc-only.m index 70ad54f8aa4..cc4a40db092 100644 --- a/clang/test/Analysis/retain-release-gc-only.m +++ b/clang/test/Analysis/retain-release-gc-only.m @@ -101,6 +101,11 @@ extern DADissenterRef DADissenterCreate( CFAllocatorRef allocator, DAReturn stat CFTypeRef CFMakeCollectable(CFTypeRef cf) ; +static __inline__ __attribute__((always_inline)) id NSMakeCollectable(CFTypeRef +cf) { + return cf ? (id)CFMakeCollectable(cf) : ((void*)0); +} + //===----------------------------------------------------------------------===// // Test cases. //===----------------------------------------------------------------------===// @@ -124,6 +129,31 @@ void f3() { CFRetain(A); } +void f3b() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning + CFMakeCollectable(A); +} + + +void f4() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}} + NSMakeCollectable(A); + CFRetain(A); +} + +void f4b() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning + NSMakeCollectable(A); +} + +void f5() { + id x = [NSMakeCollectable(CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks)) autorelease]; // no-warning +} + +void f5b() { + id x = [(id) CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks) autorelease]; // expected-warning{{leak}} +} + // Test return of non-owned objects in contexts where an owned object // is expected. @interface TestReturnNotOwnedWhenExpectedOwned @@ -133,7 +163,7 @@ void f3() { @implementation TestReturnNotOwnedWhenExpectedOwned - (NSString*)newString { - NSString *s = [NSString stringWithUTF8String:"hello"]; // expected-warning{{Potential leak (when using garbage collection) of an object allocated on line 136 and stored into 's'}} + NSString *s = [NSString stringWithUTF8String:"hello"]; // expected-warning{{Potential leak (when using garbage collection) of an object allocated}} CFRetain(s); return s; } |