refcnt_naming.m revision 6fd8f914d399035e1417d9e548d3a8d598195370
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 MyClass : NSObject
14{
15  id myObject;
16}
17- (NSURL *)myMethod:(NSString *)inString;
18- (NSURL *)getMethod:(NSString*)inString;
19- (void)addObject:(id)X;
20@end
21
22@implementation MyClass
23
24- (NSURL *)myMethod:(NSString *)inString
25{
26  NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0);
27  return url; // expected-warning{{leak}}
28}
29
30- (NSURL *)getMethod:(NSString *)inString
31{
32  NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0);
33  [self addObject:url];
34  return url; // no-warning
35}
36
37
38- (void)addObject:(id)X
39{
40  myObject = X;
41}
42
43@end
44