diff options
Diffstat (limited to 'test/Analysis/retain-release.mm')
-rw-r--r-- | test/Analysis/retain-release.mm | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/Analysis/retain-release.mm b/test/Analysis/retain-release.mm index d92237b185a2..47d67eae1b9f 100644 --- a/test/Analysis/retain-release.mm +++ b/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 + |