summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-03-19 19:50:58 +0000
committerTed Kremenek <kremenek@apple.com>2009-03-19 19:50:58 +0000
commit67a3bb7af7af6c3035722a9146c5aa921af01f9b (patch)
tree79d4b495789f3c40aebdcdd4ca635fba20b052eb
parent5182b758a06c9ceb6bca4bc55189642a42fc587f (diff)
downloadbcm5719-llvm-67a3bb7af7af6c3035722a9146c5aa921af01f9b.tar.gz
bcm5719-llvm-67a3bb7af7af6c3035722a9146c5aa921af01f9b.zip
Add test cases for PR 3820.
llvm-svn: 67327
-rw-r--r--clang/test/Analysis/retain-release.m26
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/test/Analysis/retain-release.m b/clang/test/Analysis/retain-release.m
index c6a05c0031c..50a809c36a9 100644
--- a/clang/test/Analysis/retain-release.m
+++ b/clang/test/Analysis/retain-release.m
@@ -69,6 +69,8 @@ typedef struct _NSZone NSZone;
- (const char *)UTF8String;
- (id)initWithUTF8String:(const char *)nullTerminatedCString;
+ (id)stringWithUTF8String:(const char *)nullTerminatedCString;
+- (id)init;
+- (void)dealloc;
@end extern NSString * const NSCurrentLocaleDidChangeNotification ;
@protocol NSLocking - (void)lock;
@end extern NSString * const NSUndoManagerCheckpointNotification;
@@ -334,3 +336,27 @@ static void rdar_6659160(char *inkind, char *inname)
}
@end
+// PR 3820 - Reason about calls to -dealloc
+void pr3820_DeallocInsteadOfRelease(void)
+{
+ id foo = [[NSString alloc] init]; // no-warning
+ [foo dealloc];
+ // foo is not leaked, since it has been deallocated.
+}
+
+void pr3820_ReleaseAfterDealloc(void)
+{
+ id foo = [[NSString alloc] init];
+ [foo dealloc];
+ [foo release]; // expected-warning{{used after it is release}}
+ // NSInternalInconsistencyException: message sent to deallocated object
+}
+
+void pr3820_DeallocAfterRelease(void)
+{
+ NSLog(@"\n\n[%s]", __FUNCTION__);
+ id foo = [[NSString alloc] init];
+ [foo release];
+ [foo dealloc]; // expected-warning{{used after it is released}}
+ // message sent to released object
+}
OpenPOWER on IntegriCloud