150
|
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 }
|