diff options
| author | Ted Kremenek <kremenek@apple.com> | 2009-05-09 01:50:57 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2009-05-09 01:50:57 +0000 |
| commit | 2d0ff62a0d16458da4efbfcf95726f3d905ab863 (patch) | |
| tree | 3555446890e8f99d1c2a0353c46d0ed0c3dd2a89 /clang/test | |
| parent | 8326c2fdfcf45763d47bdb1cbf50b5438d144229 (diff) | |
| download | bcm5719-llvm-2d0ff62a0d16458da4efbfcf95726f3d905ab863.tar.gz bcm5719-llvm-2d0ff62a0d16458da4efbfcf95726f3d905ab863.zip | |
It lives! The retain/release checker now tracks objects that are sent
'autorelease'.
llvm-svn: 71307
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Analysis/retain-release.m | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/clang/test/Analysis/retain-release.m b/clang/test/Analysis/retain-release.m index de86dbc2898..49fd98b3b7e 100644 --- a/clang/test/Analysis/retain-release.m +++ b/clang/test/Analysis/retain-release.m @@ -284,10 +284,32 @@ void f12() { } void f13_autorelease() { - CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning [(id) A autorelease]; // no-warning } +void f13_autorelease_b() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; // expected-warning{{Object will be sent more -release messages from its containing autorelease pools than it has retain counts}} +} + +CFMutableArrayRef f13_autorelease_c() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; + return A; // expected-warning{{Object will be sent more -release messages from its containing autorelease pools than it has retain counts}} +} + +CFMutableArrayRef f13_autorelease_d() { + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + [(id) A autorelease]; + [(id) A autorelease]; + CFMutableArrayRef B = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{Object will be sent more -release messages}} + CFRelease(B); // no-warning +} + + // This case exercises the logic where the leak site is the same as the allocation site. void f14_leakimmediately() { CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}} |

