refcnt_naming.m revision e1cea75e70d76f55157749a7bcad319050492945
1// RUN: clang-cc -analyze -checker-cfref -analyzer-store=basic -verify %s && 2// RUN: clang-cc -analyze -checker-cfref -analyzer-store=basic-new-cast -verify %s && 3// RUN: clang-cc -analyze -checker-cfref -analyzer-store=region -verify %s 4 5typedef const struct __CFString * CFStringRef; 6typedef const struct __CFAllocator * CFAllocatorRef; 7typedef const struct __CFURL * CFURLRef; 8extern CFURLRef CFURLCreateWithString(CFAllocatorRef allocator, CFStringRef URLString, CFURLRef baseURL); 9typedef signed char BOOL; 10@protocol NSObject - (BOOL)isEqual:(id)object; @end 11@interface NSObject <NSObject> {} @end 12@class NSArray, NSString, NSURL; 13 14@interface NamingTest : NSObject {} 15-(NSObject*)photocopy; // read as "photocopy" 16-(NSObject*)photoCopy; // read as "photo Copy" 17-(NSObject*)__blebPRCopy; // read as "bleb PRCopy" 18-(NSObject*)__blebPRcopy; // read as "bleb P Rcopy" 19-(NSObject*)new_theprefixdoesnotcount; // read as "theprefixdoesnotcount" 20-(NSObject*)newestAwesomeStuff; // read as "newest awesome stuff" 21 22@end 23 24@interface MyClass : NSObject 25{ 26 id myObject; 27} 28- (NSURL *)myMethod:(NSString *)inString; 29- (NSURL *)getMethod:(NSString*)inString; 30- (void)addObject:(id)X; 31@end 32 33@implementation MyClass 34 35- (NSURL *)myMethod:(NSString *)inString 36{ 37 NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0); // expected-warning{{leak}} 38 return url; 39} 40 41- (NSURL *)getMethod:(NSString *)inString 42{ 43 NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0); 44 [self addObject:url]; 45 return url; // no-warning 46} 47 48void testNames(NamingTest* x) { 49 [x photocopy]; // no-warning 50 [x photoCopy]; // expected-warning{{leak}} 51 [x __blebPRCopy]; // expected-warning{{leak}} 52 [x __blebPRcopy]; // no-warning 53 [x new_theprefixdoesnotcount]; // no-warning 54 [x newestAwesomeStuff]; // no-warning 55} 56 57 58- (void)addObject:(id)X 59{ 60 myObject = X; 61} 62 63@end 64