refcnt_naming.m revision b7ff4c684264f9877837f75dc6e22c4a5dde0e55
1// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=basic -verify %s 2// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -verify %s 3 4typedef const struct __CFString * CFStringRef; 5typedef const struct __CFAllocator * CFAllocatorRef; 6typedef const struct __CFURL * CFURLRef; 7extern CFURLRef CFURLCreateWithString(CFAllocatorRef allocator, CFStringRef URLString, CFURLRef baseURL); 8typedef signed char BOOL; 9@protocol NSObject - (BOOL)isEqual:(id)object; @end 10@interface NSObject <NSObject> {} @end 11@class NSArray, NSString, NSURL; 12 13@interface NamingTest : NSObject {} 14-(NSObject*)copyPhoto; 15-(NSObject*)mutableCopyPhoto; 16-(NSObject*)mutable; 17-(NSObject*)mutableCopying; 18-(NSObject*)photocopy; // read as "photocopy" 19-(NSObject*)photoCopy; // read as "photo Copy" 20-(NSObject*)__blebPRCopy; // read as "bleb PRCopy" 21-(NSObject*)__blebPRcopy; // read as "bleb P Rcopy" 22-(NSObject*)new_theprefixdoescount; // read as "new theprefixdoescount" 23-(NSObject*)newestAwesomeStuff; // read as "newest awesome stuff" 24 25@end 26 27@interface MyClass : NSObject 28{ 29 id myObject; 30} 31- (NSURL *)myMethod:(NSString *)inString; 32- (NSURL *)getMethod:(NSString*)inString; 33- (NSURL *)getMethod2:(NSString*)inString; 34- (void)addObject:(id) __attribute__((ns_consumed)) X; 35- (void)addObject2:(id) X; 36@end 37 38@implementation MyClass 39 40- (NSURL *)myMethod:(NSString *)inString 41{ 42 NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0); // expected-warning{{leak}} 43 return url; 44} 45 46- (NSURL *)getMethod:(NSString *)inString 47{ 48 NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0); 49 [self addObject:url]; 50 return url; // no-warning 51} 52 53- (NSURL *)getMethod2:(NSString *)inString 54{ 55 NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0); // expected-warning{{leak}} 56 [self addObject2:url]; 57 return url; 58} 59 60void testNames(NamingTest* x) { 61 [x copyPhoto]; // expected-warning{{leak}} 62 [x mutableCopyPhoto]; // expected-warning{{leak}} 63 [x mutable]; // no-warning 64 [x mutableCopying]; // no-warning 65 [x photocopy]; // no-warning 66 [x photoCopy]; // no-warning 67 [x __blebPRCopy]; // no-warning 68 [x __blebPRcopy]; // no-warning 69 [x new_theprefixdoescount]; // expected-warning{{leak}} 70 [x newestAwesomeStuff]; // no-warning 71} 72 73 74- (void)addObject:(id)X 75{ 76 myObject = X; 77} 78 79- (void)addObject2:(id)X 80{ 81 myObject = X; 82} 83 84@end 85 86