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