summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/retain-release.mm
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2013-03-29 00:32:36 +0000
committerTed Kremenek <kremenek@apple.com>2013-03-29 00:32:36 +0000
commit1f8e65d88e05af9d163f2abf3a5d49b94d043ac9 (patch)
tree4d565afae1e4b4a6f37411f50472aae304ec026a /clang/test/Analysis/retain-release.mm
parent554bdc66a4084e9d9361d4a8ff37e88087e77d9f (diff)
downloadbcm5719-llvm-1f8e65d88e05af9d163f2abf3a5d49b94d043ac9.tar.gz
bcm5719-llvm-1f8e65d88e05af9d163f2abf3a5d49b94d043ac9.zip
[analyzer] Add static initializer test case (from <rdar://problem/13227740>).
llvm-svn: 178321
Diffstat (limited to 'clang/test/Analysis/retain-release.mm')
-rw-r--r--clang/test/Analysis/retain-release.mm23
1 files changed, 23 insertions, 0 deletions
diff --git a/clang/test/Analysis/retain-release.mm b/clang/test/Analysis/retain-release.mm
index d92237b185a..47d67eae1b9 100644
--- a/clang/test/Analysis/retain-release.mm
+++ b/clang/test/Analysis/retain-release.mm
@@ -64,6 +64,8 @@ extern const CFArrayCallBacks kCFTypeArrayCallBacks;
typedef const struct __CFArray * CFArrayRef;
typedef struct __CFArray * CFMutableArrayRef;
extern CFMutableArrayRef CFArrayCreateMutable(CFAllocatorRef allocator, CFIndex capacity, const CFArrayCallBacks *callBacks);
+void abort(void) __attribute__((noreturn));
+CFArrayRef CFArrayCreate(CFAllocatorRef allocator, const void **values, CFIndex numValues, const CFArrayCallBacks *callBacks);
extern const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx);
extern void CFArrayAppendValue(CFMutableArrayRef theArray, const void *value);
typedef struct {
@@ -385,3 +387,24 @@ void testCallback() {
val >> process;
}
+//===----------------------------------------------------------------------===//
+// Test handling static initializers.
+//===----------------------------------------------------------------------===//
+
+@interface radar13227740 : NSObject
+@end
+
+@implementation radar13227740
+- (CFArrayRef)test {
+ static CFArrayRef array = ::CFArrayCreate(0, 0, 0, 0);
+ do { if (!((0 != array)/1)) { abort(); } } while (false);
+ return array;
+}
+
+// Previously this reported a bogus leak.
+- (void)test2 {
+ (void)[self test];
+ (void)[self test];
+}
+@end
+
OpenPOWER on IntegriCloud