41 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -verify -Wno-objc-root-class %s2 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@end15 16@implementation Foo17@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@end33 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