[analyzer] Add static initializer test case (from <rdar://problem/13227740>).
authorTed Kremenek <kremenek@apple.com>
Fri, 29 Mar 2013 00:32:36 +0000 (00:32 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 29 Mar 2013 00:32:36 +0000 (00:32 +0000)
llvm-svn: 178321

clang/test/Analysis/retain-release.mm

index d92237b..47d67ea 100644 (file)
@@ -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
+