brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 8989fac Raw
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