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