refcnt_naming.m revision b80976c752ad3469c54ecd10d5ba5847fd48d7a8
1// RUN: clang -analyze -checker-cfref -analyzer-store=basic -verify %s &&
2// RUN: clang -analyze -checker-cfref -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*)photocopy;    // read as "photocopy"
15-(NSObject*)photoCopy;    // read as "photo Copy"
16-(NSObject*)__blebPRCopy; // read as "bleb PRCopy"
17-(NSObject*)__blebPRcopy; // read as "bleb P Rcopy"
18-(NSObject*)new_theprefixdoesnotcount; // read as "theprefixdoesnotcount"
19@end
20
21@interface MyClass : NSObject
22{
23  id myObject;
24}
25- (NSURL *)myMethod:(NSString *)inString;
26- (NSURL *)getMethod:(NSString*)inString;
27- (void)addObject:(id)X;
28@end
29
30@implementation MyClass
31
32- (NSURL *)myMethod:(NSString *)inString
33{
34  NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0); // expected-warning{{leak}}
35  return url;
36}
37
38- (NSURL *)getMethod:(NSString *)inString
39{
40  NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0);
41  [self addObject:url];
42  return url; // no-warning
43}
44
45void testNames(NamingTest* x) {
46  [x photocopy]; // no-warning
47  [x photoCopy]; // expected-warning{{leak}}
48  [x __blebPRCopy]; // expected-warning{{leak}}
49  [x __blebPRcopy]; // no-warning
50  [x new_theprefixdoesnotcount]; // no-warning
51}
52
53
54- (void)addObject:(id)X
55{
56  myObject = X;
57}
58
59@end
60