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