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