diff options
author | Ted Kremenek <kremenek@apple.com> | 2013-03-29 00:32:36 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2013-03-29 00:32:36 +0000 |
commit | 1f8e65d88e05af9d163f2abf3a5d49b94d043ac9 (patch) | |
tree | 4d565afae1e4b4a6f37411f50472aae304ec026a /clang/test/Analysis/retain-release.mm | |
parent | 554bdc66a4084e9d9361d4a8ff37e88087e77d9f (diff) | |
download | bcm5719-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.mm | 23 |
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 + |