1// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -verify -Wno-objc-root-class %s 2 3@interface Foo { 4 __unsafe_unretained id unsafe_ivar; 5} 6 7@property (assign,nonatomic) id unsafe_prop; 8 9- (id)init; 10+ (id)new; 11+ (id)alloc; 12 13-(void)Meth; 14@end 15 16@implementation Foo 17@synthesize unsafe_prop; 18-(id)init { return self; } 19+(id)new { return 0; } 20+(id)alloc { return 0; } 21 22-(void)Meth { 23 self.unsafe_prop = [Foo new]; // expected-warning {{assigning retained object to unsafe property}} 24 self->unsafe_ivar = [Foo new]; // expected-warning {{assigning retained object to unsafe_unretained}} 25 self.unsafe_prop = [[Foo alloc] init]; // expected-warning {{assigning retained object to unsafe property}} 26 self->unsafe_ivar = [[Foo alloc] init]; // expected-warning {{assigning retained object to unsafe_unretained}} 27 28 __unsafe_unretained id unsafe_var; 29 unsafe_var = [Foo new]; // expected-warning {{assigning retained object to unsafe_unretained}} 30 unsafe_var = [[Foo alloc] init]; // expected-warning {{assigning retained object to unsafe_unretained}} 31} 32@end 33 34void bar(Foo *f) { 35 f.unsafe_prop = [Foo new]; // expected-warning {{assigning retained object to unsafe property}} 36 37 __unsafe_unretained id unsafe_var; 38 unsafe_var = [Foo new]; // expected-warning {{assigning retained object to unsafe_unretained}} 39 unsafe_var = [[Foo alloc] init]; // expected-warning {{assigning retained object to unsafe_unretained}} 40} 41