blob: 6dba18ba073b7df462b7f42c4f867db6b24f06ed [file] [log] [blame]
John McCalld1e40d52011-10-02 01:16:38 +00001// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -verify %s
Fariborz Jahanian921c1432011-06-24 18:25:34 +00002// 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
35void 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}