| // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -verify -Wno-objc-root-class %s |
| // rdar://9495837 |
| |
| @interface Foo { |
| __unsafe_unretained id unsafe_ivar; |
| } |
| |
| @property (assign,nonatomic) id unsafe_prop; |
| |
| - (id)init; |
| + (id)new; |
| + (id)alloc; |
| |
| -(void)Meth; |
| @end |
| |
| @implementation Foo |
| @synthesize unsafe_prop; |
| -(id)init { return self; } |
| +(id)new { return 0; } |
| +(id)alloc { return 0; } |
| |
| -(void)Meth { |
| self.unsafe_prop = [Foo new]; // expected-warning {{assigning retained object to unsafe property}} |
| self->unsafe_ivar = [Foo new]; // expected-warning {{assigning retained object to unsafe_unretained}} |
| self.unsafe_prop = [[Foo alloc] init]; // expected-warning {{assigning retained object to unsafe property}} |
| self->unsafe_ivar = [[Foo alloc] init]; // expected-warning {{assigning retained object to unsafe_unretained}} |
| |
| __unsafe_unretained id unsafe_var; |
| unsafe_var = [Foo new]; // expected-warning {{assigning retained object to unsafe_unretained}} |
| unsafe_var = [[Foo alloc] init]; // expected-warning {{assigning retained object to unsafe_unretained}} |
| } |
| @end |
| |
| void bar(Foo *f) { |
| f.unsafe_prop = [Foo new]; // expected-warning {{assigning retained object to unsafe property}} |
| |
| __unsafe_unretained id unsafe_var; |
| unsafe_var = [Foo new]; // expected-warning {{assigning retained object to unsafe_unretained}} |
| unsafe_var = [[Foo alloc] init]; // expected-warning {{assigning retained object to unsafe_unretained}} |
| } |