summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-05-09 01:50:57 +0000
committerTed Kremenek <kremenek@apple.com>2009-05-09 01:50:57 +0000
commit2d0ff62a0d16458da4efbfcf95726f3d905ab863 (patch)
tree3555446890e8f99d1c2a0353c46d0ed0c3dd2a89 /clang/test
parent8326c2fdfcf45763d47bdb1cbf50b5438d144229 (diff)
downloadbcm5719-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.m24
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}}
OpenPOWER on IntegriCloud