1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -fobjc-arc -x objective-c %s.result 2*67e74705SXin Li// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c %s > %t 3*67e74705SXin Li// RUN: diff %t %s.result 4*67e74705SXin Li 5*67e74705SXin Li@interface Foo 6*67e74705SXin Li@property (retain) id x; 7*67e74705SXin Li@property (retain) id y; 8*67e74705SXin Li@property (retain) id w; 9*67e74705SXin Li@property (retain) id z; 10*67e74705SXin Li@property (strong) id q; 11*67e74705SXin Li@end 12*67e74705SXin Li 13*67e74705SXin Li@implementation Foo 14*67e74705SXin Li@synthesize x; 15*67e74705SXin Li@synthesize y; 16*67e74705SXin Li@synthesize w; 17*67e74705SXin Li@synthesize q; 18*67e74705SXin Li@dynamic z; 19*67e74705SXin Li 20*67e74705SXin Li- (void) dealloc { 21*67e74705SXin Li self.x = self.y = self.w = 0; 22*67e74705SXin Li self.x = 0, w = 0, y = 0; 23*67e74705SXin Li [self setY:0]; 24*67e74705SXin Li w = 0; 25*67e74705SXin Li q = 0; 26*67e74705SXin Li self.z = 0; 27*67e74705SXin Li} 28*67e74705SXin Li@end 29*67e74705SXin Li 30*67e74705SXin Li@interface Bar 31*67e74705SXin Li@property (retain) Foo *a; 32*67e74705SXin Li- (void) setA:(Foo*) val; 33*67e74705SXin Li- (id) a; 34*67e74705SXin Li@end 35*67e74705SXin Li 36*67e74705SXin Li@implementation Bar 37*67e74705SXin Li- (void) dealloc { 38*67e74705SXin Li [self setA:0]; // This is user-defined setter overriding synthesize, don't touch it. 39*67e74705SXin Li self.a.x = 0; // every dealloc must zero out its own ivar. This patter is not recognized. 40*67e74705SXin Li} 41*67e74705SXin Li@synthesize a; 42*67e74705SXin Li- (void) setA:(Foo*) val { } 43*67e74705SXin Li- (id) a {return 0;} 44*67e74705SXin Li@end 45