]> granicus.if.org Git - clang/commitdiff
Add test case for <rdar://problem/6257780>.
authorTed Kremenek <kremenek@apple.com>
Mon, 11 May 2009 17:45:06 +0000 (17:45 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 11 May 2009 17:45:06 +0000 (17:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71444 91177308-0d34-0410-b5e6-96231b3b80d8

test/Analysis/retain-release.m

index 162e2652cebfbab3e60b31552c31d5d956755a0a..1c0bb964b2de5bedf05cf283131be457807cc747 100644 (file)
@@ -129,6 +129,17 @@ typedef mach_error_t DAReturn;
 typedef const struct __DADissenter * DADissenterRef;
 extern DADissenterRef DADissenterCreate( CFAllocatorRef allocator, DAReturn status, CFStringRef string );
 
+ @interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration>
+ - (NSUInteger)count;
+ + (id)array;
+ @end
+@interface NSAutoreleasePool : NSObject {}
++ (void)addObject:(id)anObject;
+- (void)addObject:(id)anObject;
+- (void)drain;
+@end
+
 //===----------------------------------------------------------------------===//
 // Test cases.
 //===----------------------------------------------------------------------===//
@@ -488,6 +499,18 @@ void rdar6704930(unsigned char *s, unsigned int length) {
 }
 @end
 
+//===----------------------------------------------------------------------===//
+// <rdar://problem/6257780> clang checker fails to catch use-after-release
+//===----------------------------------------------------------------------===//
+                                 
+int rdar_6257780() {
+  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+  NSArray *array = [NSArray array];
+  [array release]; // expected-warning{{Incorrect decrement of the reference count of an object is not owned at this point by the caller}}
+  [pool drain];
+  return 0;
+}
+
 //===----------------------------------------------------------------------===//
 // Tests of ownership attributes.
 //===----------------------------------------------------------------------===//