refcnt_naming.m revision be1fe1eb12a1cb91c8e3a9fcc2db4dfe989def6c
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); // expected-warning{{leak}}
27  return url;
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