blob: 589fcf57f40cedf898af3013a887b054fa30021e [file] [log] [blame]
Ted Kremenek3065cf92012-06-19 00:37:39 +00001// RUN: %clang_cc1 -analyze -analyzer-checker=experimental.osx.cocoa.Dealloc %s -verify
Ted Kremeneke0bb8042008-12-08 21:59:21 +00002typedef signed char BOOL;
Ted Kremenekdd06e092009-02-13 22:26:30 +00003@protocol NSObject
4- (BOOL)isEqual:(id)object;
5- (Class)class;
6@end
7
Ted Kremeneke0bb8042008-12-08 21:59:21 +00008@interface NSObject <NSObject> {}
9- (void)dealloc;
Ted Kremenek63de7362008-12-08 22:01:50 +000010- (id)init;
Ted Kremeneke0bb8042008-12-08 21:59:21 +000011@end
12
Ted Kremenek63de7362008-12-08 22:01:50 +000013typedef struct objc_selector *SEL;
14
Ted Kremeneke0bb8042008-12-08 21:59:21 +000015// <rdar://problem/6380411>: 'myproperty' has kind 'assign' and thus the
16// assignment through the setter does not perform a release.
17
18@interface MyObject : NSObject {
19 id _myproperty;
20}
21@property(assign) id myproperty;
22@end
23
24@implementation MyObject
25@synthesize myproperty=_myproperty; // no-warning
26- (void)dealloc {
27 self.myproperty = 0;
28 [super dealloc];
29}
30@end
Ted Kremenek63de7362008-12-08 22:01:50 +000031
32//===------------------------------------------------------------------------===
33// Don't warn about iVars that are selectors.
34
35@interface TestSELs : NSObject {
36 SEL a;
37 SEL b;
38}
39
40@end
41
Fariborz Jahanian04765ac2009-11-23 18:04:25 +000042@implementation TestSELs
Ted Kremenek63de7362008-12-08 22:01:50 +000043- (id)init {
44 if( (self = [super init]) ) {
45 a = @selector(a);
46 b = @selector(b);
47 }
48
49 return self;
50}
51@end
Ted Kremenek26b58cd2008-12-08 22:05:43 +000052
53//===------------------------------------------------------------------------===
54// Don't warn about iVars that are IBOutlets.
55
Ted Kremenek26b58cd2008-12-08 22:05:43 +000056@class NSWindow;
57
58@interface HasOutlet : NSObject {
59IBOutlet NSWindow *window;
60}
61@end
62
63@implementation HasOutlet // no-warning
64@end
65
Ted Kremenek183c6f22009-02-10 23:41:52 +000066//===------------------------------------------------------------------------===
67// <rdar://problem/6380411>
68// Was bogus warning: "The '_myproperty' instance variable was not retained by a
69// synthesized property but was released in 'dealloc'"
70
71@interface MyObject_rdar6380411 : NSObject {
72 id _myproperty;
73}
74@property(assign) id myproperty;
75@end
76
77@implementation MyObject_rdar6380411
78@synthesize myproperty=_myproperty;
79- (void)dealloc {
80 // Don't claim that myproperty is released since it the property
81 // has the 'assign' attribute.
82 self.myproperty = 0; // no-warning
83 [super dealloc];
84}
85@end
Ted Kremenekdd06e092009-02-13 22:26:30 +000086
87//===------------------------------------------------------------------------===
88// PR 3187: http://llvm.org/bugs/show_bug.cgi?id=3187
89// - Disable the missing -dealloc check for classes that subclass SenTestCase
90
91@class NSString;
92
93@interface SenTestCase : NSObject {}
94@end
95
96@interface MyClassTest : SenTestCase {
97 NSString *resourcePath;
98}
99@end
100
101@interface NSBundle : NSObject {}
102+ (NSBundle *)bundleForClass:(Class)aClass;
103- (NSString *)resourcePath;
104@end
105
106@implementation MyClassTest
107- (void)setUp {
108 resourcePath = [[NSBundle bundleForClass:[self class]] resourcePath];
109}
110- (void)testXXX {
111 // do something which uses resourcepath
112}
113@end