blob: 8a94fe848993ed2b8334d2fb8c0c2d5ef4b18f94 [file] [log] [blame]
Ted Kremenek8382cf52009-11-13 18:46:29 +00001// RUN: clang-cc -analyze -analyzer-experimental-internal-checks -warn-objc-missing-dealloc %s -verify
Ted Kremenek997c1552008-10-30 15:19:43 +00002
3// Tests for the checker which checks missing/extra ivar 'release' calls
4// in dealloc.
5
6@interface NSObject
7- (void)release;
Steve Naroff87d3ef02008-11-17 22:29:32 +00008- dealloc;
Ted Kremenek997c1552008-10-30 15:19:43 +00009@end
10
11@interface MyClass : NSObject {
12@private
13 id _X;
14 id _Y;
15 id _Z;
16 id _K;
17 id _N;
18 id _M;
19 id _V;
20 id _W;
21}
22@property(retain) id X;
23@property(retain) id Y;
24@property(assign) id Z;
25@property(assign) id K;
Fariborz Jahanian567c8df2008-12-06 01:12:43 +000026@property(readonly) id N;
Ted Kremenek997c1552008-10-30 15:19:43 +000027@property(retain) id M;
28@property(retain) id V;
29@property(retain) id W;
Ted Kremenekccb55e32008-10-30 23:00:13 +000030-(id) O;
31-(void) setO: (id) arg;
Ted Kremenek997c1552008-10-30 15:19:43 +000032@end
33
34@implementation MyClass
35@synthesize X = _X;
36@synthesize Y = _Y; // expected-warning{{The '_Y' instance variable was retained by a synthesized property but wasn't released in 'dealloc'}}
37@synthesize Z = _Z; // expected-warning{{The '_Z' instance variable was not retained by a synthesized property but was released in 'dealloc'}}
38@synthesize K = _K;
39@synthesize N = _N;
40@synthesize M = _M;
41@synthesize V = _V;
42@synthesize W = _W; // expected-warning{{The '_W' instance variable was retained by a synthesized property but wasn't released in 'dealloc'}}
43
Ted Kremenekccb55e32008-10-30 23:00:13 +000044-(id) O{ return 0; }
45-(void) setO:(id)arg { }
46
Fariborz Jahanianb33f3ad2009-05-01 20:07:12 +000047- (id)dealloc
Ted Kremenek997c1552008-10-30 15:19:43 +000048{
49 [_X release];
50 [_Z release];
51 [_N release];
52
53 self.M = 0; // This will release '_M'
54 [self setV:0]; // This will release '_V'
55 [self setW:@"newW"]; // This will release '_W', but retain the new value
Ted Kremenekccb55e32008-10-30 23:00:13 +000056 self.O = 0; // no-warning
Ted Kremenek997c1552008-10-30 15:19:43 +000057 [super dealloc];
Mike Stump431e4d32009-07-21 18:52:41 +000058 return 0;
Ted Kremenek997c1552008-10-30 15:19:43 +000059}
60
61@end
62