42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // 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}}
 | |
| }
 |