Home | History | Annotate | Download | only in SemaObjC
      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