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