blob: 9200412fbdb8c9a53e5749429c50f597ae174179 [file] [log] [blame]
Ted Kremenek997c1552008-10-30 15:19:43 +00001// RUN: clang -warn-objc-missing-dealloc %s -verify
2
3// Tests for the checker which checks missing/extra ivar 'release' calls
4// in dealloc.
5
6@interface NSObject
7- (void)release;
8@end
9
10@interface MyClass : NSObject {
11@private
12 id _X;
13 id _Y;
14 id _Z;
15 id _K;
16 id _N;
17 id _M;
18 id _V;
19 id _W;
20}
21@property(retain) id X;
22@property(retain) id Y;
23@property(assign) id Z;
24@property(assign) id K;
25@property(assign, readonly) id N;
26@property(retain) id M;
27@property(retain) id V;
28@property(retain) id W;
29@end
30
31@implementation MyClass
32@synthesize X = _X;
33@synthesize Y = _Y; // expected-warning{{The '_Y' instance variable was retained by a synthesized property but wasn't released in 'dealloc'}}
34@synthesize Z = _Z; // expected-warning{{The '_Z' instance variable was not retained by a synthesized property but was released in 'dealloc'}}
35@synthesize K = _K;
36@synthesize N = _N;
37@synthesize M = _M;
38@synthesize V = _V;
39@synthesize W = _W; // expected-warning{{The '_W' instance variable was retained by a synthesized property but wasn't released in 'dealloc'}}
40
41- (void)dealloc
42{
43 [_X release];
44 [_Z release];
45 [_N release];
46
47 self.M = 0; // This will release '_M'
48 [self setV:0]; // This will release '_V'
49 [self setW:@"newW"]; // This will release '_W', but retain the new value
50
51 [super dealloc];
52}
53
54@end
55