diff --git a/clang/test/Analysis/retain-release.m b/clang/test/Analysis/retain-release.m index 10753b46c6bbe85f981c7d5908c0c1f91233189d..3a9649c741210f642308159e15f0f2d43eed1b27 100644 --- a/clang/test/Analysis/retain-release.m +++ b/clang/test/Analysis/retain-release.m @@ -1,7 +1,5 @@ -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -analyzer-output=text -fblocks -Wno-objc-root-class %s > %t.objc 2>&1 -// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -analyzer-output=text -fblocks -Wno-objc-root-class -x objective-c++ %s > %t.objcpp 2>&1 -// RUN: FileCheck -exact-match -input-file=%t.objc %s -// RUN: FileCheck -exact-match -input-file=%t.objcpp %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -fblocks -verify -Wno-objc-root-class %s +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core,osx.coreFoundation.CFRetainRelease,osx.cocoa.ClassRelease,osx.cocoa.RetainCount -analyzer-store=region -fblocks -verify -x objective-c++ -Wno-objc-root-class %s #if __has_feature(attribute_ns_returns_retained) #define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) @@ -319,9 +317,9 @@ CFAbsoluteTime f1() { CFDateRef date = CFDateCreate(0, t); CFRetain(date); CFRelease(date); - CFDateGetAbsoluteTime(date); + CFDateGetAbsoluteTime(date); // no-warning CFRelease(date); - t = CFDateGetAbsoluteTime(date); + t = CFDateGetAbsoluteTime(date); // expected-warning{{Reference-counted object is used after it is released}} return t; } @@ -330,9 +328,9 @@ CFAbsoluteTime f2() { CFDateRef date = CFDateCreate(0, t); [((NSDate*) date) retain]; CFRelease(date); - CFDateGetAbsoluteTime(date); + CFDateGetAbsoluteTime(date); // no-warning [((NSDate*) date) release]; - t = CFDateGetAbsoluteTime(date); + t = CFDateGetAbsoluteTime(date); // expected-warning{{Reference-counted object is used after it is released}} return t; } @@ -347,10 +345,10 @@ CFAbsoluteTime f3() { CFDateRef date = CFDateCreate(0, t); [((NSDate*) date) retain]; CFRelease(date); - CFDateGetAbsoluteTime(date); + CFDateGetAbsoluteTime(date); // no-warning global_x = (NSDate*) date; [((NSDate*) date) release]; - t = CFDateGetAbsoluteTime(date); + t = CFDateGetAbsoluteTime(date); // no-warning return t; } @@ -363,7 +361,7 @@ CFAbsoluteTime f3() { CFAbsoluteTime f5(int x) { CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); - CFDateRef date = CFDateCreate(0, t); + CFDateRef date = CFDateCreate(0, t); // expected-warning{{leak}} if (x) CFRelease(date); @@ -374,7 +372,7 @@ CFAbsoluteTime f5(int x) { // Test a leak involving the return. CFDateRef f6(int x) { - CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); + CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // expected-warning{{leak}} CFRetain(date); return date; } @@ -384,7 +382,7 @@ CFDateRef f6(int x) { CFDateRef f7() { CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); //expected-warning{{leak}} CFRetain(date); - date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); + date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // expected-warning {{leak}} return date; } @@ -393,16 +391,16 @@ CFDateRef f7() { CFDateRef MyDateCreate(); CFDateRef f8() { - CFDateRef date = MyDateCreate(); + CFDateRef date = MyDateCreate(); // expected-warning{{leak}} CFRetain(date); return date; } __attribute__((cf_returns_retained)) CFDateRef f9() { - CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); + CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); // no-warning int *p = 0; // When allocations fail, CFDateCreate can return null. - if (!date) *p = 1; + if (!date) *p = 1; // expected-warning{{null}} return date; } @@ -411,23 +409,23 @@ __attribute__((cf_returns_retained)) CFDateRef f9() { // http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/DiscArbitrationFramework/ // void f10(io_service_t media, DADiskRef d, CFStringRef s) { - DADiskRef disk = DADiskCreateFromBSDName(kCFAllocatorDefault, 0, "hello"); + DADiskRef disk = DADiskCreateFromBSDName(kCFAllocatorDefault, 0, "hello"); // expected-warning{{leak}} if (disk) NSLog(@"ok"); - disk = DADiskCreateFromIOMedia(kCFAllocatorDefault, 0, media); + disk = DADiskCreateFromIOMedia(kCFAllocatorDefault, 0, media); // expected-warning{{leak}} if (disk) NSLog(@"ok"); - CFDictionaryRef dict = DADiskCopyDescription(d); + CFDictionaryRef dict = DADiskCopyDescription(d); // expected-warning{{leak}} if (dict) NSLog(@"ok"); - disk = DADiskCopyWholeDisk(d); + disk = DADiskCopyWholeDisk(d); // expected-warning{{leak}} if (disk) NSLog(@"ok"); - DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, + DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, // expected-warning{{leak}} kDAReturnSuccess, s); if (dissenter) NSLog(@"ok"); - DASessionRef session = DASessionCreate(kCFAllocatorDefault); + DASessionRef session = DASessionCreate(kCFAllocatorDefault); // expected-warning{{leak}} if (session) NSLog(@"ok"); } @@ -444,16 +442,16 @@ void f11() { CFArrayAppendValue(A, s1); // Decrement the reference count. - CFRelease(s1); + CFRelease(s1); // no-warning // Get the string. We don't own it. s1 = (CFStringRef) CFArrayGetValueAtIndex(A, 0); // Release the array. - CFRelease(A); + CFRelease(A); // no-warning // Release the string. This is a bug. - CFRelease(s1); + CFRelease(s1); // expected-warning{{Incorrect decrement of the reference count}} } // PR 3337: Handle functions declared using typedefs. @@ -461,40 +459,40 @@ typedef CFTypeRef CREATEFUN(); CREATEFUN MyCreateFun; void f12() { - CFTypeRef o = MyCreateFun(); + CFTypeRef o = MyCreateFun(); // expected-warning {{leak}} } void f13_autorelease() { - CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); - [(id) A autorelease]; + CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning + [(id) A autorelease]; // no-warning } void f13_autorelease_b() { CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); [(id) A autorelease]; - [(id) A autorelease]; + [(id) A autorelease]; // expected-warning{{Object sent -autorelease too many times}} } CFMutableArrayRef f13_autorelease_c() { CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); [(id) A autorelease]; [(id) A autorelease]; - return A; + return A; // expected-warning{{Object sent -autorelease too many times}} } CFMutableArrayRef f13_autorelease_d() { CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); [(id) A autorelease]; [(id) A autorelease]; - CFMutableArrayRef B = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); - CFRelease(B); + CFMutableArrayRef B = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{Object sent -autorelease too many times}} + CFRelease(B); // no-warning while (1) {} } // This case exercises the logic where the leak site is the same as the allocation site. void f14_leakimmediately() { - CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning{{leak}} } // Test that we track an allocated object beyond the point where the *name* @@ -504,7 +502,7 @@ void f15() { CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); CFMutableArrayRef *B = &A; // At this point, the name 'A' is no longer live. - CFRelease(*B); + CFRelease(*B); // no-warning } // Test when we pass NULL to CFRetain/CFRelease. @@ -513,10 +511,10 @@ void f16(int x, CFTypeRef p) { return; if (x) { - CFRelease(p); + CFRelease(p); // expected-warning{{Null pointer argument in call to CFRelease}} } else { - CFRetain(p); + CFRetain(p); // expected-warning{{Null pointer argument in call to CFRetain}} } } @@ -525,12 +523,12 @@ void f17(int x, CFTypeRef p) { if (x) { CFRelease(p); if (!p) - CFRelease(0); + CFRelease(0); // no-warning } else { CFRetain(p); if (!p) - CFRetain(0); + CFRetain(0); // no-warning } } @@ -545,7 +543,7 @@ void f17(int x, CFTypeRef p) { @implementation SelfIvarTest - (void)test_self_tracking { - myObj = (id) CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + myObj = (id) CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } @end @@ -558,7 +556,7 @@ void f17(int x, CFTypeRef p) { @implementation TestReturnNotOwnedWhenExpectedOwned - (NSString*)newString { NSString *s = [NSString stringWithUTF8String:"hello"]; - return s; + return s; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} } @end @@ -571,7 +569,7 @@ static void rdar_6659160(char *inkind, char *inname) // will be a toggled flag in the future. It can indeed return null, but // Cocoa programmers generally aren't expected to reason about out-of-memory // conditions. - NSString *kind = [[NSString alloc] initWithUTF8String:inkind]; + NSString *kind = [[NSString alloc] initWithUTF8String:inkind]; // expected-warning{{leak}} // We do allow stringWithUTF8String to fail. This isn't really correct, as // far as returning 0. In most error conditions it will throw an exception. @@ -593,13 +591,13 @@ static void rdar_6659160(char *inkind, char *inname) kindC = [kind UTF8String]; if(name) nameC = [name UTF8String]; - if(!isFoo(kindC[0])) + if(!isFoo(kindC[0])) // expected-warning{{null}} return; - if(!isFoo(nameC[0])) + if(!isFoo(nameC[0])) // no-warning return; [kind release]; - [name release]; + [name release]; // expected-warning{{Incorrect decrement of the reference count}} } // PR 3677 - 'allocWithZone' should be treated as following the Cocoa naming @@ -607,14 +605,14 @@ static void rdar_6659160(char *inkind, char *inname) @interface PR3677: NSObject @end @implementation PR3677 + (id)allocWithZone:(NSZone *)inZone { - return [super allocWithZone:inZone]; + return [super allocWithZone:inZone]; // no-warning } @end // PR 3820 - Reason about calls to -dealloc void pr3820_DeallocInsteadOfRelease(void) { - id foo = [[NSString alloc] init]; + id foo = [[NSString alloc] init]; // no-warning [foo dealloc]; // foo is not leaked, since it has been deallocated. } @@ -623,7 +621,7 @@ void pr3820_ReleaseAfterDealloc(void) { id foo = [[NSString alloc] init]; [foo dealloc]; - [foo release]; + [foo release]; // expected-warning{{used after it is release}} // NSInternalInconsistencyException: message sent to deallocated object } @@ -632,7 +630,7 @@ void pr3820_DeallocAfterRelease(void) NSLog(@"\n\n[%s]", __FUNCTION__); id foo = [[NSString alloc] init]; [foo release]; - [foo dealloc]; + [foo dealloc]; // expected-warning{{used after it is released}} // message sent to released object } @@ -648,7 +646,7 @@ void rdar6704930(unsigned char *s, unsigned int length) { if (*s == ':') { ++s; --length; - name = [[NSString alloc] init]; + name = [[NSString alloc] init]; // no-warning break; } ++s; @@ -659,7 +657,7 @@ void rdar6704930(unsigned char *s, unsigned int length) { name = 0; } if (length == 0) { // no ':' found -> use it all as name - name = [[NSString alloc] init]; + name = [[NSString alloc] init]; // no-warning } } } @@ -684,7 +682,7 @@ void rdar6704930(unsigned char *s, unsigned int length) { @implementation rdar_6833332 @synthesize window; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; + NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; // expected-warning{{leak}} [dict setObject:@"foo" forKey:@"bar"]; @@ -696,7 +694,7 @@ void rdar6704930(unsigned char *s, unsigned int length) { } - (void)radar10102244 { - NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; + NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; // expected-warning{{leak}} if (window) NSLog(@"%@", window); } @@ -709,7 +707,7 @@ void rdar6704930(unsigned char *s, unsigned int length) { int rdar_6257780_Case1() { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSArray *array = [NSArray array]; - [array release]; + [array release]; // expected-warning{{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} [pool drain]; return 0; } @@ -734,7 +732,7 @@ void rdar_6866843() { [dictionary setObject:array forKey:@"key"]; [array release]; // Using 'array' here should be fine - NSLog(@"array = %@\n", array); + NSLog(@"array = %@\n", array); // no-warning // Now the array is released [dictionary release]; [pool drain]; @@ -754,10 +752,10 @@ typedef CFTypeRef OtherRef; @implementation RDar6877235 - (CFTypeRef)_copyCFTypeRef { - return [[NSString alloc] init]; + return [[NSString alloc] init]; // no-warning } - (OtherRef)_copyOtherRef { - return [[NSString alloc] init]; + return [[NSString alloc] init]; // no-warning } @end @@ -780,18 +778,18 @@ typedef CFTypeRef OtherRef; @implementation RDar6320065 - (id)initReturningNewClass { [self release]; - self = [[RDar6320065Subclass alloc] init]; + self = [[RDar6320065Subclass alloc] init]; // no-warning return self; } - (id)_initReturningNewClassBad { [self release]; - [[RDar6320065Subclass alloc] init]; + [[RDar6320065Subclass alloc] init]; // expected-warning {{leak}} return self; } - (id)initReturningNewClassBad2 { [self release]; self = [[RDar6320065Subclass alloc] init]; - return [self autorelease]; + return [self autorelease]; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} } @end @@ -800,7 +798,7 @@ typedef CFTypeRef OtherRef; @end int RDar6320065_test() { - RDar6320065 *test = [[RDar6320065 alloc] init]; + RDar6320065 *test = [[RDar6320065 alloc] init]; // no-warning [test release]; return 0; } @@ -813,8 +811,8 @@ int RDar6320065_test() { @interface RDar7129086 : NSObject {} @end @implementation RDar7129086 - (id)awakeAfterUsingCoder:(NSCoder *)aDecoder { - [self release]; - return [NSString alloc]; + [self release]; // no-warning + return [NSString alloc]; // no-warning } @end @@ -829,15 +827,15 @@ int RDar6320065_test() { @end @implementation RDar6859457 -- (NSString*) NoCopyString { return [[NSString alloc] init]; } -- (NSString*) noCopyString { return [[NSString alloc] init]; } +- (NSString*) NoCopyString { return [[NSString alloc] init]; } // expected-warning{{leak}} +- (NSString*) noCopyString { return [[NSString alloc] init]; } // expected-warning{{leak}} @end void test_RDar6859457(RDar6859457 *x, void *bytes, NSUInteger dataLength) { - [x NoCopyString]; - [x noCopyString]; - [NSData dataWithBytesNoCopy:bytes length:dataLength]; - [NSData dataWithBytesNoCopy:bytes length:dataLength freeWhenDone:1]; + [x NoCopyString]; // expected-warning{{leak}} + [x noCopyString]; // expected-warning{{leak}} + [NSData dataWithBytesNoCopy:bytes length:dataLength]; // no-warning + [NSData dataWithBytesNoCopy:bytes length:dataLength freeWhenDone:1]; // no-warning } //===----------------------------------------------------------------------===// @@ -847,8 +845,8 @@ void test_RDar6859457(RDar6859457 *x, void *bytes, NSUInteger dataLength) { static void PR4230(void) { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSString *object = [[[NSString alloc] init] autorelease]; + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // no-warning + NSString *object = [[[NSString alloc] init] autorelease]; // no-warning return; } @@ -862,7 +860,7 @@ static void PR4230(void) @implementation TestNullIdentifier + (id):(int)x, ... { - return [[NSString alloc] init]; + return [[NSString alloc] init]; // expected-warning{{leak}} } @end @@ -881,7 +879,7 @@ typedef struct s6893565* TD6893565; @implementation RDar6893565 -(TD6893565)newThing { - return (TD6893565) [[NSString alloc] init]; + return (TD6893565) [[NSString alloc] init]; // no-warning } @end @@ -892,10 +890,10 @@ typedef struct s6893565* TD6893565; void rdar6902710(QCView *view, QCRenderer *renderer, CIContext *context, NSString *str, CIImage *img, CGRect rect, CIFormat form, CGColorSpaceRef cs) { - [view createSnapshotImageOfType:str]; - [renderer createSnapshotImageOfType:str]; - [context createCGImage:img fromRect:rect]; - [context createCGImage:img fromRect:rect format:form colorSpace:cs]; + [view createSnapshotImageOfType:str]; // expected-warning{{leak}} + [renderer createSnapshotImageOfType:str]; // expected-warning{{leak}} + [context createCGImage:img fromRect:rect]; // expected-warning{{leak}} + [context createCGImage:img fromRect:rect format:form colorSpace:cs]; // expected-warning{{leak}} } //===----------------------------------------------------------------------===// @@ -904,7 +902,7 @@ void rdar6902710(QCView *view, QCRenderer *renderer, CIContext *context, //===----------------------------------------------------------------------===// void rdar6945561(CIContext *context, CGSize size, CFDictionaryRef d) { - [context createCGLayerWithSize:size info:d]; + [context createCGLayerWithSize:size info:d]; // expected-warning{{leak}} } //===----------------------------------------------------------------------===// @@ -913,15 +911,15 @@ void rdar6945561(CIContext *context, CGSize size, CFDictionaryRef d) { //===----------------------------------------------------------------------===// void IOBSDNameMatching_wrapper(mach_port_t masterPort, uint32_t options, const char * bsdName) { - IOBSDNameMatching(masterPort, options, bsdName); + IOBSDNameMatching(masterPort, options, bsdName); // expected-warning{{leak}} } void IOServiceMatching_wrapper(const char * name) { - IOServiceMatching(name); + IOServiceMatching(name); // expected-warning{{leak}} } void IOServiceNameMatching_wrapper(const char * name) { - IOServiceNameMatching(name); + IOServiceNameMatching(name); // expected-warning{{leak}} } CF_RETURNS_RETAINED CFDictionaryRef CreateDict(); @@ -931,29 +929,29 @@ void IOServiceAddNotification_wrapper(mach_port_t masterPort, const io_name_t no CFDictionaryRef matching = CreateDict(); CFRelease(matching); - IOServiceAddNotification(masterPort, notificationType, matching, + IOServiceAddNotification(masterPort, notificationType, matching, // expected-warning{{used after it is released}} expected-warning{{deprecated}} wakePort, reference, notification); } void IORegistryEntryIDMatching_wrapper(uint64_t entryID ) { - IORegistryEntryIDMatching(entryID); + IORegistryEntryIDMatching(entryID); // expected-warning{{leak}} } void IOOpenFirmwarePathMatching_wrapper(mach_port_t masterPort, uint32_t options, const char * path) { - IOOpenFirmwarePathMatching(masterPort, options, path); + IOOpenFirmwarePathMatching(masterPort, options, path); // expected-warning{{leak}} } void IOServiceGetMatchingService_wrapper(mach_port_t masterPort) { CFDictionaryRef matching = CreateDict(); IOServiceGetMatchingService(masterPort, matching); - CFRelease(matching); + CFRelease(matching); // expected-warning{{used after it is released}} } void IOServiceGetMatchingServices_wrapper(mach_port_t masterPort, io_iterator_t *existing) { CFDictionaryRef matching = CreateDict(); IOServiceGetMatchingServices(masterPort, matching, existing); - CFRelease(matching); + CFRelease(matching); // expected-warning{{used after it is released}} } void IOServiceAddMatchingNotification_wrapper(IONotificationPortRef notifyPort, const io_name_t notificationType, @@ -961,7 +959,7 @@ void IOServiceAddMatchingNotification_wrapper(IONotificationPortRef notifyPort, CFDictionaryRef matching = CreateDict(); IOServiceAddMatchingNotification(notifyPort, notificationType, matching, callback, refCon, notification); - CFRelease(matching); + CFRelease(matching); // expected-warning{{used after it is released}} } //===----------------------------------------------------------------------===// @@ -978,9 +976,9 @@ void rdar_6539791(CFMutableDictionaryRef y, void* key, void* val_key) { signed z = 1; CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); if (value) { - CFDictionaryAddValue(x, val_key, (void*)value); + CFDictionaryAddValue(x, val_key, (void*)value); // no-warning CFRelease(value); - CFDictionaryAddValue(y, val_key, (void*)value); + CFDictionaryAddValue(y, val_key, (void*)value); // no-warning } } @@ -993,7 +991,7 @@ void rdar_6560661(CFMutableArrayRef x) { CFArrayAppendValue(x, value); CFRelease(value); CFRetain(value); - CFRelease(value); + CFRelease(value); // no-warning } // @@ -1002,7 +1000,7 @@ void rdar_7152619(CFStringRef str) { CFAttributedStringRef string = CFAttributedStringCreate(kCFAllocatorDefault, str, 0); CFMutableAttributedStringRef attrString = CFAttributedStringCreateMutableCopy(kCFAllocatorDefault, 100, string); CFRelease(string); - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} CFAttributedStringSetAttribute(attrString, CFRangeMake(0, 1), str, number); [number release]; [number retain]; @@ -1027,7 +1025,7 @@ void rdar_7184450(CGContextRef myContext, CGFloat x, CGPoint myStartPoint, }; // End color CGGradientRef myGradient = - CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), + CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), // expected-warning{{leak}} components, locations, num_locations); CGContextDrawLinearGradient(myContext, myGradient, myStartPoint, myEndPoint, @@ -1049,7 +1047,7 @@ void rdar_7184450_pos(CGContextRef myContext, CGFloat x, CGPoint myStartPoint, }; // End color CGGradientRef myGradient = - CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations); + CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations); // expected-warning 2 {{leak}} CGContextDrawLinearGradient(myContext, myGradient, myStartPoint, myEndPoint, 0); @@ -1083,11 +1081,11 @@ void *rdar_7299394_start_routine(void *p) { return 0; } void rdar_7299394(pthread_attr_t *attr, pthread_t *thread, void *args) { - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning pthread_create(thread, attr, rdar_7299394_start_routine, number); } void rdar_7299394_positive(pthread_attr_t *attr, pthread_t *thread) { - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} } //===----------------------------------------------------------------------===// @@ -1096,7 +1094,7 @@ void rdar_7299394_positive(pthread_attr_t *attr, pthread_t *thread) { //===----------------------------------------------------------------------===// void rdar11282706(pthread_key_t key) { - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning pthread_setspecific(key, (void*) number); } @@ -1171,7 +1169,7 @@ CVReturn rdar_7283567(CFAllocatorRef allocator, size_t width, size_t height, // For the allocated object, it doesn't really matter what type it is // for the purpose of this test. All we want to show is that // this is freed later by the callback. - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning return CVPixelBufferCreateWithBytes(allocator, width, height, pixelFormatType, baseAddress, bytesPerRow, releaseCallback, @@ -1190,7 +1188,7 @@ CVReturn rdar_7283567_2(CFAllocatorRef allocator, size_t width, size_t height, // For the allocated object, it doesn't really matter what type it is // for the purpose of this test. All we want to show is that // this is freed later by the callback. - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning return CVPixelBufferCreateWithPlanarBytes(allocator, width, height, pixelFormatType, dataPtr, dataSize, @@ -1220,9 +1218,9 @@ void rdar_7358899(void *data, // For the allocated object, it doesn't really matter what type it is // for the purpose of this test. All we want to show is that // this is freed later by the callback. - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning - CGBitmapContextCreateWithData(data, width, height, bitsPerComponent, + CGBitmapContextCreateWithData(data, width, height, bitsPerComponent, // expected-warning{{leak}} bytesPerRow, space, bitmapInfo, releaseCallback, number); } @@ -1240,11 +1238,11 @@ void rdar_7358899(void *data, @end void rdar7265711_a(RDar7265711 *x) { - id y = [x new_stuff]; + id y = [x new_stuff]; // expected-warning{{leak}} } void rdar7265711_b(RDar7265711 *x) { - id y = [x new_stuff]; + id y = [x new_stuff]; // no-warning [y release]; } @@ -1260,8 +1258,8 @@ void rdar7265711_b(RDar7265711 *x) { void rdar7306898(void) { // 'dragCopyCursor' does not follow Cocoa's fundamental rule. It is a noun, not an sentence // implying a 'copy' of something. - NSCursor *c = [NSCursor dragCopyCursor]; - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSCursor *c = [NSCursor dragCopyCursor]; // no-warning + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} } //===----------------------------------------------------------------------===// @@ -1271,10 +1269,10 @@ void rdar7306898(void) { @interface RDar7252064 : NSObject @end void rdar7252064(void) { - [RDar7252064 release]; - [RDar7252064 retain]; - [RDar7252064 autorelease]; - [NSAutoreleasePool drain]; + [RDar7252064 release]; // expected-warning{{The 'release' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [RDar7252064 retain]; // expected-warning{{The 'retain' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [RDar7252064 autorelease]; // expected-warning{{The 'autorelease' message should be sent to instances of class 'RDar7252064' and not the class directly}} + [NSAutoreleasePool drain]; // expected-warning{{method '+drain' not found}} expected-warning{{The 'drain' message should be sent to instances of class 'NSAutoreleasePool' and not the class directly}} } //===----------------------------------------------------------------------===// @@ -1286,38 +1284,38 @@ typedef NSString* MyStringTy; @protocol FooP; @interface TestOwnershipAttr : NSObject -- (NSString*) returnsAnOwnedString NS_RETURNS_RETAINED; -- (NSString*) returnsAnOwnedCFString CF_RETURNS_RETAINED; -- (MyStringTy) returnsAnOwnedTypedString NS_RETURNS_RETAINED; -- (NSString*) newString NS_RETURNS_NOT_RETAINED; +- (NSString*) returnsAnOwnedString NS_RETURNS_RETAINED; // no-warning +- (NSString*) returnsAnOwnedCFString CF_RETURNS_RETAINED; // no-warning +- (MyStringTy) returnsAnOwnedTypedString NS_RETURNS_RETAINED; // no-warning +- (NSString*) newString NS_RETURNS_NOT_RETAINED; // no-warning - (NSString*) newStringNoAttr; -- (int) returnsAnOwnedInt NS_RETURNS_RETAINED; +- (int) returnsAnOwnedInt NS_RETURNS_RETAINED; // expected-warning{{'ns_returns_retained' attribute only applies to methods that return an Objective-C object}} - (id) pseudoInit NS_CONSUMES_SELF NS_RETURNS_RETAINED; + (void) consume:(id) NS_CONSUMED x; + (void) consume2:(id) CF_CONSUMED x; @end -static int ownership_attribute_doesnt_go_here NS_RETURNS_RETAINED; +static int ownership_attribute_doesnt_go_here NS_RETURNS_RETAINED; // expected-warning{{'ns_returns_retained' attribute only applies to functions and methods}} void test_attr_1(TestOwnershipAttr *X) { - NSString *str = [X returnsAnOwnedString]; + NSString *str = [X returnsAnOwnedString]; // expected-warning{{leak}} } void test_attr_1b(TestOwnershipAttr *X) { - NSString *str = [X returnsAnOwnedCFString]; + NSString *str = [X returnsAnOwnedCFString]; // expected-warning{{leak}} } void test_attr1c(TestOwnershipAttr *X) { - NSString *str = [X newString]; - NSString *str2 = [X newStringNoAttr]; + NSString *str = [X newString]; // no-warning + NSString *str2 = [X newStringNoAttr]; // expected-warning{{leak}} } void testattr2_a() { - TestOwnershipAttr *x = [TestOwnershipAttr alloc]; + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // expected-warning{{leak}} } void testattr2_b() { - TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; + TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; // expected-warning{{leak}} } void testattr2_b_11358224_self_assign_looses_the_leak() { @@ -1326,14 +1324,14 @@ void testattr2_b_11358224_self_assign_looses_the_leak() { } void testattr2_c() { - TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; + TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; // no-warning [x release]; } void testattr3() { - TestOwnershipAttr *x = [TestOwnershipAttr alloc]; + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // no-warning [TestOwnershipAttr consume:x]; - TestOwnershipAttr *y = [TestOwnershipAttr alloc]; + TestOwnershipAttr *y = [TestOwnershipAttr alloc]; // no-warning [TestOwnershipAttr consume2:y]; } @@ -1341,19 +1339,19 @@ void consume_ns(id NS_CONSUMED x); void consume_cf(id CF_CONSUMED x); void testattr4() { - TestOwnershipAttr *x = [TestOwnershipAttr alloc]; + TestOwnershipAttr *x = [TestOwnershipAttr alloc]; // no-warning consume_ns(x); - TestOwnershipAttr *y = [TestOwnershipAttr alloc]; + TestOwnershipAttr *y = [TestOwnershipAttr alloc]; // no-warning consume_cf(y); } @interface TestOwnershipAttr2 : NSObject -- (NSString*) newString NS_RETURNS_NOT_RETAINED; +- (NSString*) newString NS_RETURNS_NOT_RETAINED; // no-warning @end @implementation TestOwnershipAttr2 - (NSString*) newString { - return [NSString alloc]; + return [NSString alloc]; // expected-warning {{Potential leak of an object}} } @end @@ -1386,20 +1384,20 @@ CFDateRef returnsRetainedCFDate() { } - (CFDateRef) newCFRetainedAsCFNoAttr { - return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; + return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; // expected-warning{{Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected}} } - (NSDate*) alsoReturnsRetained { - return (NSDate*) returnsRetainedCFDate(); + return (NSDate*) returnsRetainedCFDate(); // expected-warning{{leak}} } - (CFDateRef) alsoReturnsRetainedAsCF { - return returnsRetainedCFDate(); + return returnsRetainedCFDate(); // expected-warning{{leak}} } - (NSDate*) returnsNSRetained { - return (NSDate*) returnsRetainedCFDate(); + return (NSDate*) returnsRetainedCFDate(); // no-warning } @end @@ -1415,25 +1413,25 @@ void panic_not_in_hardcoded_list() __attribute__((noreturn)); void test_panic_negative() { signed z = 1; - CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}} } void test_panic_positive() { signed z = 1; - CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // no-warning panic(); } void test_panic_neg_2(int x) { signed z = 1; - CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // expected-warning{{leak}} if (x) panic(); } void test_panic_pos_2(int x) { signed z = 1; - CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); + CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); // no-warning if (x) panic(); if (!x) { @@ -1449,28 +1447,28 @@ void test_panic_pos_2(int x) { //===----------------------------------------------------------------------===// void test_blocks_1_pos(void) { - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning{{leak}} ^{}(); } void test_blocks_1_indirect_release(void) { - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning ^{ [number release]; }(); } void test_blocks_1_indirect_retain(void) { // Eventually this should be reported as a leak. - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning ^{ [number retain]; }(); } void test_blocks_1_indirect_release_via_call(void) { - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // no-warning ^(NSObject *o){ [o release]; }(number); } void test_blocks_1_indirect_retain_via_call(void) { - NSNumber *number = [[NSNumber alloc] initWithInt:5]; + NSNumber *number = [[NSNumber alloc] initWithInt:5]; // expected-warning {{leak}} ^(NSObject *o){ [o retain]; }(number); } @@ -1505,7 +1503,7 @@ void r8272168() { - (NSDate*) rdar8356342:(NSDate*)inValue { NSDate *outValue = inValue; if (outValue == 0) - outValue = [[NSDate alloc] init]; + outValue = [[NSDate alloc] init]; // no-warning if (outValue != inValue) [outValue autorelease]; @@ -1528,7 +1526,7 @@ static void rdar_8724287(CFErrorRef error) while (error_to_dump != ((void*)0)) { CFDictionaryRef info; - info = CFErrorCopyUserInfo(error_to_dump); + info = CFErrorCopyUserInfo(error_to_dump); // expected-warning{{Potential leak of an object}} if (info != ((void*)0)) { } @@ -1574,52 +1572,52 @@ void rdar9726279() { // Test camelcase support for CF conventions. While Core Foundation APIs // don't use camel casing, other code is allowed to use it. CFArrayRef camelcase_create_1() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } CFArrayRef camelcase_createno() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} } CFArrayRef camelcase_copy() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } CFArrayRef camelcase_copying() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} } CFArrayRef copyCamelCase() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } CFArrayRef __copyCamelCase() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } CFArrayRef __createCamelCase() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } CFArrayRef camel_create() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } CFArrayRef camel_creat() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} } CFArrayRef camel_copy() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } CFArrayRef camel_copyMachine() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning } CFArrayRef camel_copymachine() { - return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); + return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // expected-warning {{leak}} } // rdar://problem/8024350 @@ -1640,14 +1638,14 @@ CFArrayRef camel_copymachine() { // Radar 6582778. void rdar6582778(void) { CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); - CFTypeRef vals[] = { CFDateCreate(0, t) }; + CFTypeRef vals[] = { CFDateCreate(0, t) }; // expected-warning {{leak}} } CFTypeRef global; void rdar6582778_2(void) { CFAbsoluteTime t = CFAbsoluteTimeGetCurrent(); - global = CFDateCreate(0, t); + global = CFDateCreate(0, t); // no-warning } // - Test that objects passed to containers @@ -1660,7 +1658,7 @@ void rdar10232019() { [array addObject:string]; [string release]; - NSString *otherString = [string stringByAppendingString:@"bar"]; + NSString *otherString = [string stringByAppendingString:@"bar"]; // no-warning NSLog(@"%@", otherString); } @@ -1670,7 +1668,7 @@ void rdar10232019_positive() { NSString *string = [[NSString alloc] initWithUTF8String:"foo"]; [string release]; - NSString *otherString = [string stringByAppendingString:@"bar"]; + NSString *otherString = [string stringByAppendingString:@"bar"]; // expected-warning {{Reference-counted object is used after it is release}} NSLog(@"%@", otherString); } @@ -1683,7 +1681,7 @@ void xpc_release(xpc_object_t object); void rdar9658496() { CFStringRef cf; xpc_object_t xpc; - cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); + cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning xpc = _CFXPCCreateXPCObjectFromCFObject( cf ); CFRelease(cf); xpc_release(xpc); @@ -1704,7 +1702,7 @@ void rdar9658496() { void rdar_10824732() { @autoreleasepool { NSString *obj = @"test"; - RDar10824732 *foo = [[RDar10824732 alloc] initWithObj:obj]; + RDar10824732 *foo = [[RDar10824732 alloc] initWithObj:obj]; // no-warning [foo release]; } } @@ -1771,17 +1769,17 @@ extern id NSApp; void *malloc(size_t); struct rdar11104566 { CFStringRef myStr; }; struct rdar11104566 test_rdar11104566() { - CFStringRef cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); + CFStringRef cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning struct rdar11104566 V; V.myStr = cf; - return V; + return V; // no-warning } struct rdar11104566 *test_2_rdar11104566() { - CFStringRef cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); + CFStringRef cf = CFStringCreateWithCString( ((CFAllocatorRef)0), "test", kCFStringEncodingUTF8 ); // no-warning struct rdar11104566 *V = (struct rdar11104566 *) malloc(sizeof(*V)); V->myStr = cf; - return V; + return V; // no-warning } //===----------------------------------------------------------------------===// @@ -1791,7 +1789,7 @@ struct rdar11104566 *test_2_rdar11104566() { void test_objc_arrays() { { // CASE ONE -- OBJECT IN ARRAY CREATED DIRECTLY NSObject *o = [[NSObject alloc] init]; - NSArray *a = [[NSArray alloc] initWithObjects:o, (void*)0]; + NSArray *a = [[NSArray alloc] initWithObjects:o, (void*)0]; // expected-warning {{leak}} [o release]; [a description]; [o description]; @@ -1800,7 +1798,7 @@ void test_objc_arrays() { { // CASE TWO -- OBJECT IN ARRAY CREATED BY DUPING AUTORELEASED ARRAY NSObject *o = [[NSObject alloc] init]; NSArray *a1 = [NSArray arrayWithObjects:o, (void*)0]; - NSArray *a2 = [[NSArray alloc] initWithArray:a1]; + NSArray *a2 = [[NSArray alloc] initWithArray:a1]; // expected-warning {{leak}} [o release]; [a2 description]; [o description]; @@ -1808,7 +1806,7 @@ void test_objc_arrays() { { // CASE THREE -- OBJECT IN RETAINED @[] NSObject *o = [[NSObject alloc] init]; - NSArray *a3 = [@[o] retain]; + NSArray *a3 = [@[o] retain]; // expected-warning {{leak}} [o release]; [a3 description]; [o description]; @@ -1816,7 +1814,7 @@ void test_objc_arrays() { { // CASE FOUR -- OBJECT IN ARRAY CREATED BY DUPING @[] NSObject *o = [[NSObject alloc] init]; - NSArray *a = [[NSArray alloc] initWithArray:@[o]]; + NSArray *a = [[NSArray alloc] initWithArray:@[o]]; // expected-warning {{leak}} [o release]; [a description]; @@ -1825,7 +1823,7 @@ void test_objc_arrays() { { // CASE FIVE -- OBJECT IN RETAINED @{} NSValue *o = [[NSValue alloc] init]; - NSDictionary *a = [@{o : o} retain]; + NSDictionary *a = [@{o : o} retain]; // expected-warning {{leak}} [o release]; [a description]; @@ -1834,15 +1832,15 @@ void test_objc_arrays() { } void test_objc_integer_literals() { - id value = [@1 retain]; + id value = [@1 retain]; // expected-warning {{leak}} [value description]; } void test_objc_boxed_expressions(int x, const char *y) { - id value = [@(x) retain]; + id value = [@(x) retain]; // expected-warning {{leak}} [value description]; - value = [@(y) retain]; + value = [@(y) retain]; // expected-warning {{leak}} [value description]; } @@ -1857,7 +1855,7 @@ void rdar11400885(int y) printString = [[NSString alloc] init]; NSLog(@"Once %@", printString); [printString release]; - NSLog(@"Again: %@", printString); + NSLog(@"Again: %@", printString); // expected-warning {{Reference-counted object is used after it is released}} } } @@ -1877,28 +1875,28 @@ void CFConsumeAndStopTracking(CFTypeRef CF_CONSUMED obj, void (^callback)(void)) void testConsumeAndStopTracking() { id retained = [@[] retain]; // +1 - consumeAndStopTracking(retained, ^{}); + consumeAndStopTracking(retained, ^{}); // no-warning id doubleRetained = [[@[] retain] retain]; // +2 consumeAndStopTracking(doubleRetained, ^{ [doubleRetained release]; - }); + }); // no-warning id unretained = @[]; // +0 - consumeAndStopTracking(unretained, ^{}); + consumeAndStopTracking(unretained, ^{}); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} } void testCFConsumeAndStopTracking() { id retained = [@[] retain]; // +1 - CFConsumeAndStopTracking((CFTypeRef)retained, ^{}); + CFConsumeAndStopTracking((CFTypeRef)retained, ^{}); // no-warning - id doubleRetained = [[@[] retain] retain]; + id doubleRetained = [[@[] retain] retain]; // +2 CFConsumeAndStopTracking((CFTypeRef)doubleRetained, ^{ [doubleRetained release]; - }); + }); // no-warning id unretained = @[]; // +0 - CFConsumeAndStopTracking((CFTypeRef)unretained, ^{}); + CFConsumeAndStopTracking((CFTypeRef)unretained, ^{}); // expected-warning {{Incorrect decrement of the reference count of an object that is not owned at this point by the caller}} } //===----------------------------------------------------------------------===// // Test 'pragma clang arc_cf_code_audited' support. @@ -1910,7 +1908,7 @@ MyCFType CreateMyCFType(); #pragma clang arc_cf_code_audited end void test_custom_cf() { - MyCFType x = CreateMyCFType(); + MyCFType x = CreateMyCFType(); // expected-warning {{leak of an object stored into 'x'}} } //===----------------------------------------------------------------------===// @@ -1919,1171 +1917,5 @@ void test_custom_cf() { //===----------------------------------------------------------------------===// void test_CFPlugInInstanceCreate(CFUUIDRef factoryUUID, CFUUIDRef typeUUID) { - CFPlugInInstanceCreate(kCFAllocatorDefault, factoryUUID, typeUUID); -} - -// CHECK: 934:3: warning: 'IOServiceAddNotification' is deprecated -// CHECK: IOServiceAddNotification(masterPort, notificationType, matching, -// CHECK: ^ -// CHECK: 204:15: note: 'IOServiceAddNotification' declared here -// CHECK: kern_return_t IOServiceAddNotification( mach_port_t masterPort, const io_name_t notificationType, CFDictionaryRef matching, mach_port_t wakePort, uintptr_t reference, io_iterator_t * notification ) __attribute__((deprecated)); // expected-note {{'IOServiceAddNotification' declared here}} -// CHECK: ^ -// CHECK: 1277:3: warning: class method '+drain' not found (return type defaults to 'id') -// CHECK: [NSAutoreleasePool drain]; -// CHECK: ^ ~~~~~ -// CHECK: 1294:1: warning: 'ns_returns_retained' attribute only applies to methods that return an Objective-C object -// CHECK: - (int) returnsAnOwnedInt NS_RETURNS_RETAINED; -// CHECK: ^ ~~~~~~~~~~~~~~~~~~~ -// CHECK: 1300:1: warning: 'ns_returns_retained' attribute only applies to functions and methods -// CHECK: static int ownership_attribute_doesnt_go_here NS_RETURNS_RETAINED; -// CHECK: ^ ~~~~~~~~~~~~~~~~~~~ -// CHECK: 324:7: warning: Reference-counted object is used after it is released -// CHECK: t = CFDateGetAbsoluteTime(date); -// CHECK: ^ ~~~~ -// CHECK: 335:7: warning: Reference-counted object is used after it is released -// CHECK: t = CFDateGetAbsoluteTime(date); -// CHECK: ^ ~~~~ -// CHECK: 366:20: warning: Potential leak of an object stored into 'date' -// CHECK: CFDateRef date = CFDateCreate(0, t); -// CHECK: ^ -// CHECK: 377:20: warning: Potential leak of an object stored into 'date' -// CHECK: CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); -// CHECK: ^ -// CHECK: 385:20: warning: Potential leak of an object stored into 'date' -// CHECK: CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); //expected-warning{{leak}} -// CHECK: ^ -// CHECK: 387:10: warning: Potential leak of an object stored into 'date' -// CHECK: date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); -// CHECK: ^ -// CHECK: 396:20: warning: Potential leak of an object stored into 'date' -// CHECK: CFDateRef date = MyDateCreate(); -// CHECK: ^ -// CHECK: 405:17: warning: Dereference of null pointer (loaded from variable 'p') -// CHECK: if (!date) *p = 1; -// CHECK: ~ ^ -// CHECK: 414:20: warning: Potential leak of an object stored into 'disk' -// CHECK: DADiskRef disk = DADiskCreateFromBSDName(kCFAllocatorDefault, 0, "hello"); -// CHECK: ^ -// CHECK: 417:10: warning: Potential leak of an object stored into 'disk' -// CHECK: disk = DADiskCreateFromIOMedia(kCFAllocatorDefault, 0, media); -// CHECK: ^ -// CHECK: 420:26: warning: Potential leak of an object stored into 'dict' -// CHECK: CFDictionaryRef dict = DADiskCopyDescription(d); -// CHECK: ^ -// CHECK: 423:10: warning: Potential leak of an object stored into 'disk' -// CHECK: disk = DADiskCopyWholeDisk(d); -// CHECK: ^ -// CHECK: 426:30: warning: Potential leak of an object stored into 'dissenter' -// CHECK: DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, -// CHECK: ^ -// CHECK: 430:26: warning: Potential leak of an object stored into 'session' -// CHECK: DASessionRef session = DASessionCreate(kCFAllocatorDefault); -// CHECK: ^ -// CHECK: 456:3: warning: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: CFRelease(s1); -// CHECK: ^ ~~ -// CHECK: 464:17: warning: Potential leak of an object stored into 'o' -// CHECK: CFTypeRef o = MyCreateFun(); -// CHECK: ^ -// CHECK: 475:3: warning: Object sent -autorelease too many times -// CHECK: [(id) A autorelease]; -// CHECK: ^~~~~~~~~~~~~~~~~~~~ -// CHECK: 482:3: warning: Object sent -autorelease too many times -// CHECK: return A; -// CHECK: ^ -// CHECK: 489:25: warning: Object sent -autorelease too many times -// CHECK: CFMutableArrayRef B = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// CHECK: 497:3: warning: Potential leak of an object -// CHECK: CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 516:5: warning: Null pointer argument in call to CFRelease -// CHECK: CFRelease(p); -// CHECK: ^ ~ -// CHECK: 519:5: warning: Null pointer argument in call to CFRetain -// CHECK: CFRetain(p); -// CHECK: ^ ~ -// CHECK: 561:3: warning: Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected -// CHECK: return s; -// CHECK: ^ -// CHECK: 574:20: warning: Potential leak of an object stored into 'kind' -// CHECK: NSString *kind = [[NSString alloc] initWithUTF8String:inkind]; -// CHECK: ^ -// CHECK: 596:13: warning: Array access (from variable 'kindC') results in a null pointer dereference -// CHECK: if(!isFoo(kindC[0])) -// CHECK: ^~~~~ -// CHECK: 602:3: warning: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: [name release]; -// CHECK: ^~~~~ -// CHECK: 626:3: warning: Reference-counted object is used after it is released -// CHECK: [foo release]; -// CHECK: ^~~~ -// CHECK: 635:3: warning: Reference-counted object is used after it is released -// CHECK: [foo dealloc]; -// CHECK: ^~~~ -// CHECK: 687:31: warning: Potential leak of an object stored into 'dict' -// CHECK: NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; -// CHECK: ^ -// CHECK: 699:31: warning: Potential leak of an object stored into 'dict' -// CHECK: NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; -// CHECK: ^ -// CHECK: 712:3: warning: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: [array release]; -// CHECK: ^~~~~~ -// CHECK: 788:3: warning: Potential leak of an object -// CHECK: [[RDar6320065Subclass alloc] init]; -// CHECK: ^ -// CHECK: 794:3: warning: Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected -// CHECK: return [self autorelease]; -// CHECK: ^ -// CHECK: 832:37: warning: Potential leak of an object -// CHECK: - (NSString*) NoCopyString { return [[NSString alloc] init]; } -// CHECK: ^ -// CHECK: 833:37: warning: Potential leak of an object -// CHECK: - (NSString*) noCopyString { return [[NSString alloc] init]; } -// CHECK: ^ -// CHECK: 837:3: warning: Potential leak of an object -// CHECK: [x NoCopyString]; -// CHECK: ^ -// CHECK: 838:3: warning: Potential leak of an object -// CHECK: [x noCopyString]; -// CHECK: ^ -// CHECK: 865:10: warning: Potential leak of an object -// CHECK: return [[NSString alloc] init]; -// CHECK: ^ -// CHECK: 895:3: warning: Potential leak of an object -// CHECK: [view createSnapshotImageOfType:str]; -// CHECK: ^ -// CHECK: 896:3: warning: Potential leak of an object -// CHECK: [renderer createSnapshotImageOfType:str]; -// CHECK: ^ -// CHECK: 897:3: warning: Potential leak of an object -// CHECK: [context createCGImage:img fromRect:rect]; -// CHECK: ^ -// CHECK: 898:3: warning: Potential leak of an object -// CHECK: [context createCGImage:img fromRect:rect format:form colorSpace:cs]; -// CHECK: ^ -// CHECK: 907:3: warning: Potential leak of an object -// CHECK: [context createCGLayerWithSize:size info:d]; -// CHECK: ^ -// CHECK: 916:3: warning: Potential leak of an object -// CHECK: IOBSDNameMatching(masterPort, options, bsdName); -// CHECK: ^ -// CHECK: 920:3: warning: Potential leak of an object -// CHECK: IOServiceMatching(name); -// CHECK: ^ -// CHECK: 924:3: warning: Potential leak of an object -// CHECK: IOServiceNameMatching(name); -// CHECK: ^ -// CHECK: 934:3: warning: Reference-counted object is used after it is released -// CHECK: IOServiceAddNotification(masterPort, notificationType, matching, -// CHECK: ^ ~~~~~~~~ -// CHECK: 939:3: warning: Potential leak of an object -// CHECK: IORegistryEntryIDMatching(entryID); -// CHECK: ^ -// CHECK: 944:3: warning: Potential leak of an object -// CHECK: IOOpenFirmwarePathMatching(masterPort, options, path); -// CHECK: ^ -// CHECK: 950:3: warning: Reference-counted object is used after it is released -// CHECK: CFRelease(matching); -// CHECK: ^ ~~~~~~~~ -// CHECK: 956:3: warning: Reference-counted object is used after it is released -// CHECK: CFRelease(matching); -// CHECK: ^ ~~~~~~~~ -// CHECK: 964:3: warning: Reference-counted object is used after it is released -// CHECK: CFRelease(matching); -// CHECK: ^ ~~~~~~~~ -// CHECK: 1005:22: warning: Potential leak of an object stored into 'number' -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1030:41: warning: Potential leak of an object -// CHECK: CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), -// CHECK: ^ -// CHECK: 1052:4: warning: Potential leak of an object stored into 'myGradient' -// CHECK: CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations); -// CHECK: ^ -// CHECK: 1052:40: warning: Potential leak of an object -// CHECK: CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations); -// CHECK: ^ -// CHECK: 1090:22: warning: Potential leak of an object stored into 'number' -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1225:3: warning: Potential leak of an object -// CHECK: CGBitmapContextCreateWithData(data, width, height, bitsPerComponent, -// CHECK: ^ -// CHECK: 1243:10: warning: Potential leak of an object stored into 'y' -// CHECK: id y = [x new_stuff]; -// CHECK: ^ -// CHECK: 1264:22: warning: Potential leak of an object stored into 'number' -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1274:3: warning: The 'release' message should be sent to instances of class 'RDar7252064' and not the class directly -// CHECK: [RDar7252064 release]; -// CHECK: ^~~~~~~~~~~~~~~~~~~~~ -// CHECK: 1275:3: warning: The 'retain' message should be sent to instances of class 'RDar7252064' and not the class directly -// CHECK: [RDar7252064 retain]; -// CHECK: ^~~~~~~~~~~~~~~~~~~~ -// CHECK: 1276:3: warning: The 'autorelease' message should be sent to instances of class 'RDar7252064' and not the class directly -// CHECK: [RDar7252064 autorelease]; -// CHECK: ^~~~~~~~~~~~~~~~~~~~~~~~~ -// CHECK: 1277:3: warning: The 'drain' message should be sent to instances of class 'NSAutoreleasePool' and not the class directly -// CHECK: [NSAutoreleasePool drain]; -// CHECK: ^~~~~~~~~~~~~~~~~~~~~~~~~ -// CHECK: 1303:19: warning: Potential leak of an object stored into 'str' -// CHECK: NSString *str = [X returnsAnOwnedString]; -// CHECK: ^ -// CHECK: 1307:19: warning: Potential leak of an object stored into 'str' -// CHECK: NSString *str = [X returnsAnOwnedCFString]; -// CHECK: ^ -// CHECK: 1312:20: warning: Potential leak of an object stored into 'str2' -// CHECK: NSString *str2 = [X newStringNoAttr]; -// CHECK: ^ -// CHECK: 1316:26: warning: Potential leak of an object stored into 'x' -// CHECK: TestOwnershipAttr *x = [TestOwnershipAttr alloc]; -// CHECK: ^ -// CHECK: 1320:26: warning: Potential leak of an object stored into 'x' -// CHECK: TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; -// CHECK: ^ -// CHECK: 1324:26: warning: Potential leak of an object stored into 'x' -// CHECK: TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit];// expected-warning{{leak}} -// CHECK: ^ -// CHECK: 1356:10: warning: Potential leak of an object -// CHECK: return [NSString alloc]; -// CHECK: ^ -// CHECK: 1389:3: warning: Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected -// CHECK: return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; -// CHECK: ^ -// CHECK: 1393:20: warning: Potential leak of an object -// CHECK: return (NSDate*) returnsRetainedCFDate(); -// CHECK: ^ -// CHECK: 1397:10: warning: Potential leak of an object -// CHECK: return returnsRetainedCFDate(); -// CHECK: ^ -// CHECK: 1418:23: warning: Potential leak of an object stored into 'value' -// CHECK: CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); -// CHECK: ^ -// CHECK: 1429:23: warning: Potential leak of an object stored into 'value' -// CHECK: CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); -// CHECK: ^ -// CHECK: 1452:22: warning: Potential leak of an object stored into 'number' -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1473:22: warning: Potential leak of an object stored into 'number' -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1531:16: warning: Potential leak of an object stored into 'info' -// CHECK: info = CFErrorCopyUserInfo(error_to_dump); -// CHECK: ^ -// CHECK: 1581:10: warning: Potential leak of an object -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1589:10: warning: Potential leak of an object -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1610:10: warning: Potential leak of an object -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1622:10: warning: Potential leak of an object -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1643:24: warning: Potential leak of an object stored into 'vals' -// CHECK: CFTypeRef vals[] = { CFDateCreate(0, t) }; -// CHECK: ^ -// CHECK: 1673:27: warning: Reference-counted object is used after it is released -// CHECK: NSString *otherString = [string stringByAppendingString:@"bar"]; -// CHECK: ^~~~~~~ -// CHECK: 1794:22: warning: Potential leak of an object stored into 'a' -// CHECK: NSArray *a = [[NSArray alloc] initWithObjects:o, (void*)0]; -// CHECK: ^ -// CHECK: 1803:23: warning: Potential leak of an object stored into 'a2' -// CHECK: NSArray *a2 = [[NSArray alloc] initWithArray:a1]; -// CHECK: ^ -// CHECK: 1811:24: warning: Potential leak of an object stored into 'a3' -// CHECK: NSArray *a3 = [@[o] retain]; -// CHECK: ^ -// CHECK: 1819:22: warning: Potential leak of an object stored into 'a' -// CHECK: NSArray *a = [[NSArray alloc] initWithArray:@[o]]; -// CHECK: ^ -// CHECK: 1828:28: warning: Potential leak of an object stored into 'a' -// CHECK: NSDictionary *a = [@{o : o} retain]; -// CHECK: ^ -// CHECK: 1837:15: warning: Potential leak of an object stored into 'value' -// CHECK: id value = [@1 retain]; -// CHECK: ^ -// CHECK: 1842:15: warning: Potential leak of an object stored into 'value' -// CHECK: id value = [@(x) retain]; -// CHECK: ^ -// CHECK: 1845:12: warning: Potential leak of an object stored into 'value' -// CHECK: value = [@(y) retain]; -// CHECK: ^ -// CHECK: 1860:5: warning: Reference-counted object is used after it is released -// CHECK: NSLog(@"Again: %@", printString); -// CHECK: ^ ~~~~~~~~~~~ -// CHECK: 1888:3: warning: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: consumeAndStopTracking(unretained, ^{}); -// CHECK: ^ ~~~~~~~~~~ -// CHECK: 1901:3: warning: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: CFConsumeAndStopTracking((CFTypeRef)unretained, ^{}); -// CHECK: ^ ~~~~~~~~~~~~~~~~~~~~~ -// CHECK: 1913:16: warning: Potential leak of an object stored into 'x' -// CHECK: MyCFType x = CreateMyCFType(); -// CHECK: ^ -// CHECK: 319:20: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFDateRef date = CFDateCreate(0, t); -// CHECK: ^ -// CHECK: 320:3: note: Reference count incremented. The object now has a +2 retain count -// CHECK: CFRetain(date); -// CHECK: ^ -// CHECK: 321:3: note: Reference count decremented. The object now has a +1 retain count -// CHECK: CFRelease(date); -// CHECK: ^ -// CHECK: 323:3: note: Object released -// CHECK: CFRelease(date); -// CHECK: ^ -// CHECK: 324:7: note: Reference-counted object is used after it is released -// CHECK: t = CFDateGetAbsoluteTime(date); -// CHECK: ^ -// CHECK: 330:20: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFDateRef date = CFDateCreate(0, t); -// CHECK: ^ -// CHECK: 331:3: note: Reference count incremented. The object now has a +2 retain count -// CHECK: [((NSDate*) date) retain]; -// CHECK: ^ -// CHECK: 332:3: note: Reference count decremented. The object now has a +1 retain count -// CHECK: CFRelease(date); -// CHECK: ^ -// CHECK: 334:3: note: Object released -// CHECK: [((NSDate*) date) release]; -// CHECK: ^ -// CHECK: 335:7: note: Reference-counted object is used after it is released -// CHECK: t = CFDateGetAbsoluteTime(date); -// CHECK: ^ -// CHECK: 366:20: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFDateRef date = CFDateCreate(0, t); -// CHECK: ^ -// CHECK: 368:3: note: Taking false branch -// CHECK: if (x) -// CHECK: ^ -// CHECK: 371:10: note: Object leaked: object allocated and stored into 'date' is not referenced later in this execution path and has a retain count of +1 -// CHECK: return t; -// CHECK: ^ -// CHECK: 377:20: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); -// CHECK: ^ -// CHECK: 378:3: note: Reference count incremented. The object now has a +2 retain count -// CHECK: CFRetain(date); -// CHECK: ^ -// CHECK: 379:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return date; -// CHECK: ^ -// CHECK: 380:1: note: Object leaked: object allocated and stored into 'date' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 385:20: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFDateRef date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); //expected-warning{{leak}} -// CHECK: ^ -// CHECK: 386:3: note: Reference count incremented. The object now has a +2 retain count -// CHECK: CFRetain(date); -// CHECK: ^ -// CHECK: 388:3: note: Object leaked: object allocated and stored into 'date' is not referenced later in this execution path and has a retain count of +2 -// CHECK: return date; -// CHECK: ^ -// CHECK: 387:10: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: date = CFDateCreate(0, CFAbsoluteTimeGetCurrent()); -// CHECK: ^ -// CHECK: 388:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return date; -// CHECK: ^ -// CHECK: 388:3: note: Object leaked: object allocated and stored into 'date' is returned from a function whose name ('f7') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation -// CHECK: 396:20: note: Call to function 'MyDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFDateRef date = MyDateCreate(); -// CHECK: ^ -// CHECK: 397:3: note: Reference count incremented. The object now has a +2 retain count -// CHECK: CFRetain(date); -// CHECK: ^ -// CHECK: 398:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return date; -// CHECK: ^ -// CHECK: 399:1: note: Object leaked: object allocated and stored into 'date' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 403:3: note: Variable 'p' initialized to a null pointer value -// CHECK: int *p = 0; -// CHECK: ^ -// CHECK: 405:3: note: Taking true branch -// CHECK: if (!date) *p = 1; -// CHECK: ^ -// CHECK: 405:14: note: Dereference of null pointer (loaded from variable 'p') -// CHECK: if (!date) *p = 1; -// CHECK: ^ -// CHECK: 415:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 418:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 420:26: note: Call to function 'DADiskCopyDescription' returns a Core Foundation object with a +1 retain count -// CHECK: CFDictionaryRef dict = DADiskCopyDescription(d); -// CHECK: ^ -// CHECK: 421:7: note: Assuming 'dict' is non-null -// CHECK: if (dict) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 421:3: note: Taking true branch -// CHECK: if (dict) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 421:20: note: Object leaked: object allocated and stored into 'dict' is not referenced later in this execution path and has a retain count of +1 -// CHECK: if (dict) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 415:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 418:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 421:3: note: Taking false branch -// CHECK: if (dict) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 423:10: note: Call to function 'DADiskCopyWholeDisk' returns a Core Foundation object with a +1 retain count -// CHECK: disk = DADiskCopyWholeDisk(d); -// CHECK: ^ -// CHECK: 424:7: note: Assuming 'disk' is non-null -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 424:3: note: Taking true branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 424:20: note: Object leaked: object allocated and stored into 'disk' is not referenced later in this execution path and has a retain count of +1 -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 415:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 418:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 421:3: note: Taking false branch -// CHECK: if (dict) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 424:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 426:30: note: Call to function 'DADissenterCreate' returns a Core Foundation object with a +1 retain count -// CHECK: DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, -// CHECK: ^ -// CHECK: 428:7: note: Assuming 'dissenter' is non-null -// CHECK: if (dissenter) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 428:3: note: Taking true branch -// CHECK: if (dissenter) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 428:25: note: Object leaked: object allocated and stored into 'dissenter' is not referenced later in this execution path and has a retain count of +1 -// CHECK: if (dissenter) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 415:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 418:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 421:3: note: Taking false branch -// CHECK: if (dict) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 424:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 428:3: note: Taking false branch -// CHECK: if (dissenter) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 430:26: note: Call to function 'DASessionCreate' returns a Core Foundation object with a +1 retain count -// CHECK: DASessionRef session = DASessionCreate(kCFAllocatorDefault); -// CHECK: ^ -// CHECK: 431:7: note: Assuming 'session' is non-null -// CHECK: if (session) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 431:3: note: Taking true branch -// CHECK: if (session) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 431:23: note: Object leaked: object allocated and stored into 'session' is not referenced later in this execution path and has a retain count of +1 -// CHECK: if (session) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 415:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 417:10: note: Call to function 'DADiskCreateFromIOMedia' returns a Core Foundation object with a +1 retain count -// CHECK: disk = DADiskCreateFromIOMedia(kCFAllocatorDefault, 0, media); -// CHECK: ^ -// CHECK: 418:7: note: Assuming 'disk' is non-null -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 418:3: note: Taking true branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 421:3: note: Taking false branch -// CHECK: if (dict) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 424:3: note: Taking false branch -// CHECK: if (disk) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 428:3: note: Taking false branch -// CHECK: if (dissenter) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 431:3: note: Taking false branch -// CHECK: if (session) NSLog(@"ok"); -// CHECK: ^ -// CHECK: 432:1: note: Object leaked: object allocated and stored into 'disk' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 450:22: note: Call to function 'CFArrayGetValueAtIndex' returns a Core Foundation object with a +0 retain count -// CHECK: s1 = (CFStringRef) CFArrayGetValueAtIndex(A, 0); -// CHECK: ^ -// CHECK: 456:3: note: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: CFRelease(s1); -// CHECK: ^ -// CHECK: 464:17: note: Call to function 'MyCreateFun' returns a Core Foundation object with a +1 retain count -// CHECK: CFTypeRef o = MyCreateFun(); -// CHECK: ^ -// CHECK: 465:1: note: Object leaked: object allocated and stored into 'o' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 473:25: note: Call to function 'CFArrayCreateMutable' returns a Core Foundation object with a +1 retain count -// CHECK: CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 474:3: note: Object sent -autorelease message -// CHECK: [(id) A autorelease]; -// CHECK: ^ -// CHECK: 475:3: note: Object sent -autorelease message -// CHECK: [(id) A autorelease]; -// CHECK: ^ -// CHECK: 476:1: note: Object over-autoreleased: object was sent -autorelease 2 times but the object has a +1 retain count -// CHECK: } -// CHECK: ^ -// CHECK: 479:25: note: Call to function 'CFArrayCreateMutable' returns a Core Foundation object with a +1 retain count -// CHECK: CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 480:3: note: Object sent -autorelease message -// CHECK: [(id) A autorelease]; -// CHECK: ^ -// CHECK: 481:3: note: Object sent -autorelease message -// CHECK: [(id) A autorelease]; -// CHECK: ^ -// CHECK: 482:3: note: Object over-autoreleased: object was sent -autorelease 2 times but the object has a +0 retain count -// CHECK: return A; -// CHECK: ^ -// CHECK: 486:25: note: Call to function 'CFArrayCreateMutable' returns a Core Foundation object with a +1 retain count -// CHECK: CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 487:3: note: Object sent -autorelease message -// CHECK: [(id) A autorelease]; -// CHECK: ^ -// CHECK: 488:3: note: Object sent -autorelease message -// CHECK: [(id) A autorelease]; -// CHECK: ^ -// CHECK: 489:25: note: Object over-autoreleased: object was sent -autorelease 2 times but the object has a +1 retain count -// CHECK: CFMutableArrayRef B = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 497:3: note: Call to function 'CFArrayCreateMutable' returns a Core Foundation object with a +1 retain count -// CHECK: CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 498:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 512:7: note: Assuming 'p' is null -// CHECK: if (p) -// CHECK: ^ -// CHECK: 512:7: note: Assuming pointer value is null -// CHECK: 512:3: note: Taking false branch -// CHECK: if (p) -// CHECK: ^ -// CHECK: 515:3: note: Taking true branch -// CHECK: if (x) { -// CHECK: ^ -// CHECK: 516:5: note: Null pointer argument in call to CFRelease -// CHECK: CFRelease(p); -// CHECK: ^ -// CHECK: 512:7: note: Assuming 'p' is null -// CHECK: if (p) -// CHECK: ^ -// CHECK: 512:7: note: Assuming pointer value is null -// CHECK: 512:3: note: Taking false branch -// CHECK: if (p) -// CHECK: ^ -// CHECK: 515:3: note: Taking false branch -// CHECK: if (x) { -// CHECK: ^ -// CHECK: 519:5: note: Null pointer argument in call to CFRetain -// CHECK: CFRetain(p); -// CHECK: ^ -// CHECK: 560:17: note: Method returns an Objective-C object with a +0 retain count -// CHECK: NSString *s = [NSString stringWithUTF8String:"hello"]; -// CHECK: ^ -// CHECK: 561:3: note: Object returned to caller with a +0 retain count -// CHECK: return s; -// CHECK: ^ -// CHECK: 561:3: note: Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected -// CHECK: 574:20: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSString *kind = [[NSString alloc] initWithUTF8String:inkind]; -// CHECK: ^ -// CHECK: 581:3: note: Taking true branch -// CHECK: if(!name) -// CHECK: ^ -// CHECK: 582:5: note: Object leaked: object allocated and stored into 'kind' is not referenced later in this execution path and has a retain count of +1 -// CHECK: return; -// CHECK: ^ -// CHECK: 581:3: note: Taking false branch -// CHECK: if(!name) -// CHECK: ^ -// CHECK: 584:3: note: Variable 'kindC' initialized to a null pointer value -// CHECK: const char *kindC = 0; -// CHECK: ^ -// CHECK: 592:3: note: Taking false branch -// CHECK: if(kind) -// CHECK: ^ -// CHECK: 594:3: note: Taking true branch -// CHECK: if(name) -// CHECK: ^ -// CHECK: 596:13: note: Array access (from variable 'kindC') results in a null pointer dereference -// CHECK: if(!isFoo(kindC[0])) -// CHECK: ^ -// CHECK: 580:20: note: Method returns an Objective-C object with a +0 retain count -// CHECK: NSString *name = [NSString stringWithUTF8String:inname]; -// CHECK: ^ -// CHECK: 581:6: note: Assuming 'name' is non-nil -// CHECK: if(!name) -// CHECK: ^ -// CHECK: 581:3: note: Taking false branch -// CHECK: if(!name) -// CHECK: ^ -// CHECK: 592:3: note: Taking true branch -// CHECK: if(kind) -// CHECK: ^ -// CHECK: 594:3: note: Taking true branch -// CHECK: if(name) -// CHECK: ^ -// CHECK: 596:3: note: Taking false branch -// CHECK: if(!isFoo(kindC[0])) -// CHECK: ^ -// CHECK: 598:3: note: Taking false branch -// CHECK: if(!isFoo(nameC[0])) -// CHECK: ^ -// CHECK: 602:3: note: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: [name release]; -// CHECK: ^ -// CHECK: 624:12: note: Method returns an Objective-C object with a +1 retain count -// CHECK: id foo = [[NSString alloc] init]; -// CHECK: ^ -// CHECK: 625:3: note: Object released by directly sending the '-dealloc' message -// CHECK: [foo dealloc]; -// CHECK: ^ -// CHECK: 626:3: note: Reference-counted object is used after it is released -// CHECK: [foo release]; -// CHECK: ^ -// CHECK: 633:12: note: Method returns an Objective-C object with a +1 retain count -// CHECK: id foo = [[NSString alloc] init]; -// CHECK: ^ -// CHECK: 634:3: note: Object released -// CHECK: [foo release]; -// CHECK: ^ -// CHECK: 635:3: note: Reference-counted object is used after it is released -// CHECK: [foo dealloc]; -// CHECK: ^ -// CHECK: 687:31: note: Method returns an Objective-C object with a +0 retain count -// CHECK: NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; -// CHECK: ^ -// CHECK: 687:30: note: Reference count incremented. The object now has a +1 retain count -// CHECK: NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; -// CHECK: ^ -// CHECK: 692:1: note: Object leaked: object allocated and stored into 'dict' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 699:31: note: Method returns an Objective-C object with a +0 retain count -// CHECK: NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; -// CHECK: ^ -// CHECK: 699:30: note: Reference count incremented. The object now has a +1 retain count -// CHECK: NSMutableDictionary *dict = [[NSMutableDictionary dictionaryWithCapacity:4] retain]; -// CHECK: ^ -// CHECK: 700:2: note: Taking false branch -// CHECK: if (window) -// CHECK: ^ -// CHECK: 702:1: note: Object leaked: object allocated and stored into 'dict' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 711:20: note: Method returns an Objective-C object with a +0 retain count -// CHECK: NSArray *array = [NSArray array]; -// CHECK: ^ -// CHECK: 712:3: note: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: [array release]; -// CHECK: ^ -// CHECK: 788:3: note: Method returns an Objective-C object with a +1 retain count -// CHECK: [[RDar6320065Subclass alloc] init]; -// CHECK: ^ -// CHECK: 790:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 793:10: note: Method returns an Objective-C object with a +1 retain count -// CHECK: self = [[RDar6320065Subclass alloc] init]; -// CHECK: ^ -// CHECK: 794:10: note: Object sent -autorelease message -// CHECK: return [self autorelease]; -// CHECK: ^ -// CHECK: 794:3: note: Object returned to caller with a +0 retain count -// CHECK: return [self autorelease]; -// CHECK: ^ -// CHECK: 794:3: note: Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected -// CHECK: 832:37: note: Method returns an Objective-C object with a +1 retain count -// CHECK: - (NSString*) NoCopyString { return [[NSString alloc] init]; } -// CHECK: ^ -// CHECK: 832:30: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: - (NSString*) NoCopyString { return [[NSString alloc] init]; } -// CHECK: ^ -// CHECK: 832:30: note: Object leaked: allocated object is returned from a method whose name ('NoCopyString') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa -// CHECK: 833:37: note: Method returns an Objective-C object with a +1 retain count -// CHECK: - (NSString*) noCopyString { return [[NSString alloc] init]; } -// CHECK: ^ -// CHECK: 833:30: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: - (NSString*) noCopyString { return [[NSString alloc] init]; } -// CHECK: ^ -// CHECK: 833:30: note: Object leaked: allocated object is returned from a method whose name ('noCopyString') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa -// CHECK: 837:3: note: Calling 'NoCopyString' -// CHECK: [x NoCopyString]; -// CHECK: ^ -// CHECK: 832:37: note: Method returns an Objective-C object with a +1 retain count -// CHECK: - (NSString*) NoCopyString { return [[NSString alloc] init]; } -// CHECK: ^ -// CHECK: 837:3: note: Returning from 'NoCopyString' -// CHECK: [x NoCopyString]; -// CHECK: ^ -// CHECK: 841:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 865:10: note: Method returns an Objective-C object with a +1 retain count -// CHECK: return [[NSString alloc] init]; -// CHECK: ^ -// CHECK: 865:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return [[NSString alloc] init]; -// CHECK: ^ -// CHECK: 865:3: note: Object leaked: allocated object is returned from a method whose name (':') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa -// CHECK: 895:3: note: Method returns an Objective-C object with a +1 retain count -// CHECK: [view createSnapshotImageOfType:str]; -// CHECK: ^ -// CHECK: 899:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 907:3: note: Method returns a Core Foundation object with a +1 retain count -// CHECK: [context createCGLayerWithSize:size info:d]; -// CHECK: ^ -// CHECK: 908:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 916:3: note: Call to function 'IOBSDNameMatching' returns a Core Foundation object with a +1 retain count -// CHECK: IOBSDNameMatching(masterPort, options, bsdName); -// CHECK: ^ -// CHECK: 917:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 920:3: note: Call to function 'IOServiceMatching' returns a Core Foundation object with a +1 retain count -// CHECK: IOServiceMatching(name); -// CHECK: ^ -// CHECK: 921:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 924:3: note: Call to function 'IOServiceNameMatching' returns a Core Foundation object with a +1 retain count -// CHECK: IOServiceNameMatching(name); -// CHECK: ^ -// CHECK: 925:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 932:30: note: Call to function 'CreateDict' returns a Core Foundation object with a +1 retain count -// CHECK: CFDictionaryRef matching = CreateDict(); -// CHECK: ^ -// CHECK: 933:3: note: Object released -// CHECK: CFRelease(matching); -// CHECK: ^ -// CHECK: 934:3: note: Reference-counted object is used after it is released -// CHECK: IOServiceAddNotification(masterPort, notificationType, matching, -// CHECK: ^ -// CHECK: 939:3: note: Call to function 'IORegistryEntryIDMatching' returns a Core Foundation object with a +1 retain count -// CHECK: IORegistryEntryIDMatching(entryID); -// CHECK: ^ -// CHECK: 940:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 944:3: note: Call to function 'IOOpenFirmwarePathMatching' returns a Core Foundation object with a +1 retain count -// CHECK: IOOpenFirmwarePathMatching(masterPort, options, path); -// CHECK: ^ -// CHECK: 945:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 948:30: note: Call to function 'CreateDict' returns a Core Foundation object with a +1 retain count -// CHECK: CFDictionaryRef matching = CreateDict(); -// CHECK: ^ -// CHECK: 949:3: note: Object released -// CHECK: IOServiceGetMatchingService(masterPort, matching); -// CHECK: ^ -// CHECK: 950:3: note: Reference-counted object is used after it is released -// CHECK: CFRelease(matching); -// CHECK: ^ -// CHECK: 954:30: note: Call to function 'CreateDict' returns a Core Foundation object with a +1 retain count -// CHECK: CFDictionaryRef matching = CreateDict(); -// CHECK: ^ -// CHECK: 955:3: note: Object released -// CHECK: IOServiceGetMatchingServices(masterPort, matching, existing); -// CHECK: ^ -// CHECK: 956:3: note: Reference-counted object is used after it is released -// CHECK: CFRelease(matching); -// CHECK: ^ -// CHECK: 962:30: note: Call to function 'CreateDict' returns a Core Foundation object with a +1 retain count -// CHECK: CFDictionaryRef matching = CreateDict(); -// CHECK: ^ -// CHECK: 963:3: note: Object released -// CHECK: IOServiceAddMatchingNotification(notifyPort, notificationType, matching, callback, refCon, notification); -// CHECK: ^ -// CHECK: 964:3: note: Reference-counted object is used after it is released -// CHECK: CFRelease(matching); -// CHECK: ^ -// CHECK: 1005:22: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1007:3: note: Reference count decremented -// CHECK: [number release]; -// CHECK: ^ -// CHECK: 1008:3: note: Reference count incremented. The object now has a +1 retain count -// CHECK: [number retain]; -// CHECK: ^ -// CHECK: 1009:3: note: Object leaked: object allocated and stored into 'number' is not referenced later in this execution path and has a retain count of +1 -// CHECK: CFRelease(attrString); -// CHECK: ^ -// CHECK: 1030:41: note: Call to function 'CGColorSpaceCreateDeviceRGB' returns a Core Foundation object with a +1 retain count -// CHECK: CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), -// CHECK: ^ -// CHECK: 1029:3: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: CGGradientRef myGradient = -// CHECK: ^ -// CHECK: 1052:40: note: Call to function 'CGColorSpaceCreateDeviceRGB' returns a Core Foundation object with a +1 retain count -// CHECK: CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations); -// CHECK: ^ -// CHECK: 1051:3: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: CGGradientRef myGradient = -// CHECK: ^ -// CHECK: 1052:4: note: Call to function 'CGGradientCreateWithColorComponents' returns a Core Foundation object with a +1 retain count -// CHECK: CGGradientCreateWithColorComponents(CGColorSpaceCreateDeviceRGB(), components, locations, num_locations); -// CHECK: ^ -// CHECK: 1056:1: note: Object leaked: object allocated and stored into 'myGradient' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1090:22: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1091:1: note: Object leaked: object allocated and stored into 'number' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1225:3: note: Call to function 'CGBitmapContextCreateWithData' returns a Core Foundation object with a +1 retain count -// CHECK: CGBitmapContextCreateWithData(data, width, height, bitsPerComponent, -// CHECK: ^ -// CHECK: 1227:1: note: Object leaked: allocated object is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1243:10: note: Method returns an Objective-C object with a +1 retain count -// CHECK: id y = [x new_stuff]; -// CHECK: ^ -// CHECK: 1244:1: note: Object leaked: object allocated and stored into 'y' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1264:22: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1265:1: note: Object leaked: object allocated and stored into 'number' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1274:3: note: The 'release' message should be sent to instances of class 'RDar7252064' and not the class directly -// CHECK: [RDar7252064 release]; -// CHECK: ^ -// CHECK: 1275:3: note: The 'retain' message should be sent to instances of class 'RDar7252064' and not the class directly -// CHECK: [RDar7252064 retain]; -// CHECK: ^ -// CHECK: 1276:3: note: The 'autorelease' message should be sent to instances of class 'RDar7252064' and not the class directly -// CHECK: [RDar7252064 autorelease]; -// CHECK: ^ -// CHECK: 1277:3: note: The 'drain' message should be sent to instances of class 'NSAutoreleasePool' and not the class directly -// CHECK: [NSAutoreleasePool drain]; -// CHECK: ^ -// CHECK: 1303:19: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSString *str = [X returnsAnOwnedString]; -// CHECK: ^ -// CHECK: 1304:1: note: Object leaked: object allocated and stored into 'str' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1307:19: note: Method returns a Core Foundation object with a +1 retain count -// CHECK: NSString *str = [X returnsAnOwnedCFString]; -// CHECK: ^ -// CHECK: 1308:1: note: Object leaked: object allocated and stored into 'str' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1312:20: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSString *str2 = [X newStringNoAttr]; -// CHECK: ^ -// CHECK: 1313:1: note: Object leaked: object allocated and stored into 'str2' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1316:26: note: Method returns an Objective-C object with a +1 retain count -// CHECK: TestOwnershipAttr *x = [TestOwnershipAttr alloc]; -// CHECK: ^ -// CHECK: 1317:1: note: Object leaked: object allocated and stored into 'x' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1320:26: note: Method returns an Objective-C object with a +1 retain count -// CHECK: TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit]; -// CHECK: ^ -// CHECK: 1321:1: note: Object leaked: object allocated and stored into 'x' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1324:26: note: Method returns an Objective-C object with a +1 retain count -// CHECK: TestOwnershipAttr *x = [[TestOwnershipAttr alloc] pseudoInit];// expected-warning{{leak}} -// CHECK: ^ -// CHECK: 1326:1: note: Object leaked: object allocated and stored into 'x' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1356:10: note: Method returns an Objective-C object with a +1 retain count -// CHECK: return [NSString alloc]; -// CHECK: ^ -// CHECK: 1356:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return [NSString alloc]; -// CHECK: ^ -// CHECK: 1356:3: note: Object leaked: allocated object is returned from a method that is annotated as NS_RETURNS_NOT_RETAINED -// CHECK: 1389:26: note: Calling 'returnsCFRetainedAsCF' -// CHECK: return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; -// CHECK: ^ -// CHECK: 1381:10: note: Calling 'returnsRetainedCFDate' -// CHECK: return returnsRetainedCFDate(); // No leak. -// CHECK: ^ -// CHECK: 1372:10: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: return CFDateCreate(0, CFAbsoluteTimeGetCurrent()); -// CHECK: ^ -// CHECK: 1381:10: note: Returning from 'returnsRetainedCFDate' -// CHECK: return returnsRetainedCFDate(); // No leak. -// CHECK: ^ -// CHECK: 1389:26: note: Returning from 'returnsCFRetainedAsCF' -// CHECK: return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; -// CHECK: ^ -// CHECK: 1389:21: note: Object sent -autorelease message -// CHECK: return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; -// CHECK: ^ -// CHECK: 1389:3: note: Object returned to caller with a +0 retain count -// CHECK: return (CFDateRef)[(id)[self returnsCFRetainedAsCF] autorelease]; -// CHECK: ^ -// CHECK: 1389:3: note: Object with a +0 retain count returned to caller where a +1 (owning) retain count is expected -// CHECK: 1393:20: note: Calling 'returnsRetainedCFDate' -// CHECK: return (NSDate*) returnsRetainedCFDate(); -// CHECK: ^ -// CHECK: 1372:10: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: return CFDateCreate(0, CFAbsoluteTimeGetCurrent()); -// CHECK: ^ -// CHECK: 1393:20: note: Returning from 'returnsRetainedCFDate' -// CHECK: return (NSDate*) returnsRetainedCFDate(); -// CHECK: ^ -// CHECK: 1393:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return (NSDate*) returnsRetainedCFDate(); -// CHECK: ^ -// CHECK: 1393:3: note: Object leaked: allocated object is returned from a method whose name ('alsoReturnsRetained') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa -// CHECK: 1397:10: note: Calling 'returnsRetainedCFDate' -// CHECK: return returnsRetainedCFDate(); -// CHECK: ^ -// CHECK: 1372:10: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: return CFDateCreate(0, CFAbsoluteTimeGetCurrent()); -// CHECK: ^ -// CHECK: 1397:10: note: Returning from 'returnsRetainedCFDate' -// CHECK: return returnsRetainedCFDate(); -// CHECK: ^ -// CHECK: 1397:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return returnsRetainedCFDate(); -// CHECK: ^ -// CHECK: 1397:3: note: Object leaked: allocated object is returned from a method whose name ('alsoReturnsRetainedAsCF') does not start with 'copy', 'mutableCopy', 'alloc' or 'new'. This violates the naming convention rules given in the Memory Management Guide for Cocoa -// CHECK: 1418:23: note: Call to function 'CFNumberCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); -// CHECK: ^ -// CHECK: 1419:1: note: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1429:23: note: Call to function 'CFNumberCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFNumberRef value = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &z); -// CHECK: ^ -// CHECK: 1430:3: note: Taking false branch -// CHECK: if (x) -// CHECK: ^ -// CHECK: 1432:1: note: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1452:22: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1453:3: note: Object leaked: object allocated and stored into 'number' is not referenced later in this execution path and has a retain count of +1 -// CHECK: ^{}(); -// CHECK: ^ -// CHECK: 1473:22: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSNumber *number = [[NSNumber alloc] initWithInt:5]; -// CHECK: ^ -// CHECK: 1474:3: note: Calling anonymous block -// CHECK: ^(NSObject *o){ [o retain]; }(number); -// CHECK: ^ -// CHECK: 1474:19: note: Reference count incremented. The object now has a +2 retain count -// CHECK: ^(NSObject *o){ [o retain]; }(number); -// CHECK: ^ -// CHECK: 1474:3: note: Returning to caller -// CHECK: ^(NSObject *o){ [o retain]; }(number); -// CHECK: ^ -// CHECK: 1475:1: note: Object leaked: object allocated and stored into 'number' is not referenced later in this execution path and has a retain count of +2 -// CHECK: } -// CHECK: ^ -// CHECK: 1528:5: note: Loop condition is true. Entering loop body -// CHECK: while (error_to_dump != ((void*)0)) { -// CHECK: ^ -// CHECK: 1531:16: note: Call to function 'CFErrorCopyUserInfo' returns a Core Foundation object with a +1 retain count -// CHECK: info = CFErrorCopyUserInfo(error_to_dump); -// CHECK: ^ -// CHECK: 1533:13: note: Assuming 'info' is not equal to null -// CHECK: if (info != ((void*)0)) { -// CHECK: ^ -// CHECK: 1533:9: note: Taking true branch -// CHECK: if (info != ((void*)0)) { -// CHECK: ^ -// CHECK: 1528:5: note: Loop condition is false. Execution jumps to the end of the function -// CHECK: while (error_to_dump != ((void*)0)) { -// CHECK: ^ -// CHECK: 1538:1: note: Object leaked: object allocated and stored into 'info' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1581:10: note: Call to function 'CFArrayCreateMutable' returns a Core Foundation object with a +1 retain count -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1581:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1581:3: note: Object leaked: allocated object is returned from a function whose name ('camelcase_createno') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation -// CHECK: 1589:10: note: Call to function 'CFArrayCreateMutable' returns a Core Foundation object with a +1 retain count -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1589:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1589:3: note: Object leaked: allocated object is returned from a function whose name ('camelcase_copying') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation -// CHECK: 1610:10: note: Call to function 'CFArrayCreateMutable' returns a Core Foundation object with a +1 retain count -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1610:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1610:3: note: Object leaked: allocated object is returned from a function whose name ('camel_creat') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation -// CHECK: 1622:10: note: Call to function 'CFArrayCreateMutable' returns a Core Foundation object with a +1 retain count -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1622:3: note: Object returned to caller as an owning reference (single retain count transferred to caller) -// CHECK: return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); -// CHECK: ^ -// CHECK: 1622:3: note: Object leaked: allocated object is returned from a function whose name ('camel_copymachine') does not contain 'Copy' or 'Create'. This violates the naming convention rules given in the Memory Management Guide for Core Foundation -// CHECK: 1643:24: note: Call to function 'CFDateCreate' returns a Core Foundation object with a +1 retain count -// CHECK: CFTypeRef vals[] = { CFDateCreate(0, t) }; -// CHECK: ^ -// CHECK: 1644:1: note: Object leaked: object allocated and stored into 'vals' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1670:22: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSString *string = [[NSString alloc] initWithUTF8String:"foo"]; -// CHECK: ^ -// CHECK: 1671:3: note: Object released -// CHECK: [string release]; -// CHECK: ^ -// CHECK: 1673:27: note: Reference-counted object is used after it is released -// CHECK: NSString *otherString = [string stringByAppendingString:@"bar"]; -// CHECK: ^ -// CHECK: 1794:22: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSArray *a = [[NSArray alloc] initWithObjects:o, (void*)0]; -// CHECK: ^ -// CHECK: 1797:9: note: Object leaked: object allocated and stored into 'a' is not referenced later in this execution path and has a retain count of +1 -// CHECK: [o description]; -// CHECK: ^ -// CHECK: 1803:23: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSArray *a2 = [[NSArray alloc] initWithArray:a1]; -// CHECK: ^ -// CHECK: 1806:9: note: Object leaked: object allocated and stored into 'a2' is not referenced later in this execution path and has a retain count of +1 -// CHECK: [o description]; -// CHECK: ^ -// CHECK: 1811:24: note: NSArray literal is an object with a +0 retain count -// CHECK: NSArray *a3 = [@[o] retain]; -// CHECK: ^ -// CHECK: 1811:23: note: Reference count incremented. The object now has a +1 retain count -// CHECK: NSArray *a3 = [@[o] retain]; -// CHECK: ^ -// CHECK: 1814:9: note: Object leaked: object allocated and stored into 'a3' is not referenced later in this execution path and has a retain count of +1 -// CHECK: [o description]; -// CHECK: ^ -// CHECK: 1819:22: note: Method returns an Objective-C object with a +1 retain count -// CHECK: NSArray *a = [[NSArray alloc] initWithArray:@[o]]; -// CHECK: ^ -// CHECK: 1823:9: note: Object leaked: object allocated and stored into 'a' is not referenced later in this execution path and has a retain count of +1 -// CHECK: [o description]; -// CHECK: ^ -// CHECK: 1828:28: note: NSDictionary literal is an object with a +0 retain count -// CHECK: NSDictionary *a = [@{o : o} retain]; -// CHECK: ^ -// CHECK: 1828:27: note: Reference count incremented. The object now has a +1 retain count -// CHECK: NSDictionary *a = [@{o : o} retain]; -// CHECK: ^ -// CHECK: 1832:9: note: Object leaked: object allocated and stored into 'a' is not referenced later in this execution path and has a retain count of +1 -// CHECK: [o description]; -// CHECK: ^ -// CHECK: 1837:15: note: NSNumber literal is an object with a +0 retain count -// CHECK: id value = [@1 retain]; -// CHECK: ^ -// CHECK: 1837:14: note: Reference count incremented. The object now has a +1 retain count -// CHECK: id value = [@1 retain]; -// CHECK: ^ -// CHECK: 1839:1: note: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1842:15: note: NSNumber boxed expression produces an object with a +0 retain count -// CHECK: id value = [@(x) retain]; -// CHECK: ^ -// CHECK: 1842:14: note: Reference count incremented. The object now has a +1 retain count -// CHECK: id value = [@(x) retain]; -// CHECK: ^ -// CHECK: 1846:3: note: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 -// CHECK: [value description]; -// CHECK: ^ -// CHECK: 1845:12: note: NSString boxed expression produces an object with a +0 retain count -// CHECK: value = [@(y) retain]; -// CHECK: ^ -// CHECK: 1845:11: note: Reference count incremented. The object now has a +1 retain count -// CHECK: value = [@(y) retain]; -// CHECK: ^ -// CHECK: 1847:1: note: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ -// CHECK: 1854:5: note: Taking false branch -// CHECK: if(y > 2) -// CHECK: ^ -// CHECK: 1857:21: note: Method returns an Objective-C object with a +1 retain count -// CHECK: printString = [[NSString alloc] init]; -// CHECK: ^ -// CHECK: 1859:5: note: Object released -// CHECK: [printString release]; -// CHECK: ^ -// CHECK: 1860:5: note: Reference-counted object is used after it is released -// CHECK: NSLog(@"Again: %@", printString); -// CHECK: ^ -// CHECK: 1887:19: note: NSArray literal is an object with a +0 retain count -// CHECK: id unretained = @[]; // +0 -// CHECK: ^ -// CHECK: 1888:3: note: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: consumeAndStopTracking(unretained, ^{}); -// CHECK: ^ -// CHECK: 1900:19: note: NSArray literal is an object with a +0 retain count -// CHECK: id unretained = @[]; // +0 -// CHECK: ^ -// CHECK: 1901:3: note: Incorrect decrement of the reference count of an object that is not owned at this point by the caller -// CHECK: CFConsumeAndStopTracking((CFTypeRef)unretained, ^{}); -// CHECK: ^ -// CHECK: 1913:16: note: Call to function 'CreateMyCFType' returns a Core Foundation object with a +1 retain count -// CHECK: MyCFType x = CreateMyCFType(); -// CHECK: ^ -// CHECK: 1914:1: note: Object leaked: object allocated and stored into 'x' is not referenced later in this execution path and has a retain count of +1 -// CHECK: } -// CHECK: ^ + CFPlugInInstanceCreate(kCFAllocatorDefault, factoryUUID, typeUUID); // no-warning +}