1 // RUN: %clang_cc1 -analyze -analyzer-checker=alpha.osx.cocoa.Dealloc %s -verify 2 typedef signed char BOOL; 3 @protocol NSObject 4 - (BOOL)isEqual:(id)object; 5 - (Class)class; 6 @end 7 8 @interface NSObject <NSObject> {} 9 - (void)dealloc; 10 - (id)init; 11 @end 12 13 typedef struct objc_selector *SEL; 14 15 // <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 31 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 42 @implementation TestSELs 43 - (id)init { 44 if( (self = [super init]) ) { 45 a = @selector(a); 46 b = @selector(b); 47 } 48 49 return self; 50 } 51 @end 52 53 //===------------------------------------------------------------------------=== 54 // Don't warn about iVars that are IBOutlets. 55 56 @class NSWindow; 57 58 @interface HasOutlet : NSObject { 59 IBOutlet NSWindow *window; 60 } 61 @end 62 63 @implementation HasOutlet // no-warning 64 @end 65 66 //===------------------------------------------------------------------------=== 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 86 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 114