1// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fsyntax-only -fobjc-arc -verify -Wno-objc-root-class %s 2// rdar://9340606 3 4@interface Foo { 5@public 6 id __unsafe_unretained x; // expected-error {{existing instance variable 'x' for strong property 'x' may not be __unsafe_unretained}} 7 id __weak y; // expected-error {{existing instance variable 'y' for strong property 'y' may not be __weak}} 8 id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}} 9} 10@property(strong) id x; // expected-note {{property declared here}} 11@property(strong) id y; // expected-note {{property declared here}} 12@property(strong) id z; 13@end 14 15@implementation Foo 16@synthesize x; // expected-note {{property synthesized here}} 17@synthesize y; // expected-note {{property synthesized here}} 18@synthesize z; // suppressed 19@end 20 21@interface Bar { 22@public 23 id __unsafe_unretained x; // expected-error {{existing instance variable 'x' for strong property 'x' may not be __unsafe_unretained}} 24 id __weak y; // expected-error {{existing instance variable 'y' for strong property 'y' may not be __weak}} 25 id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}} 26} 27@property(retain) id x; // expected-note {{property declared here}} 28@property(retain) id y; // expected-note {{property declared here}} 29@property(retain) id z; 30@end 31 32@implementation Bar 33@synthesize x; // expected-note {{property synthesized here}} 34@synthesize y; // expected-note {{property synthesized here}} 35@synthesize z; // suppressed 36@end 37 38@interface Bas { 39@public 40 id __unsafe_unretained x; // expected-error {{existing instance variable 'x' for strong property 'x' may not be __unsafe_unretained}} 41 id __weak y; // expected-error {{existing instance variable 'y' for strong property 'y' may not be __weak}} 42 id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}} 43} 44@property(copy) id x; // expected-note {{property declared here}} 45@property(copy) id y; // expected-note {{property declared here}} 46@property(copy) id z; 47@end 48 49@implementation Bas 50@synthesize x; // expected-note {{property synthesized here}} 51@synthesize y; // expected-note {{property synthesized here}} 52@synthesize z; // suppressed 53@end 54 55@interface Bat 56@property(strong) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}} 57@property(strong) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}} 58@end 59 60@interface Bau 61@property(retain) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}} 62@property(retain) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}} 63@end 64 65@interface Bav 66@property(copy) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}} 67@property(copy) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}} 68@end 69 70// rdar://9341593 71@interface Gorf { 72 id __unsafe_unretained x; 73 id y; // expected-error {{existing instance variable 'y' for property 'y' with assign attribute must be __unsafe_unretained}} 74} 75@property(assign) id __unsafe_unretained x; 76@property(assign) id y; // expected-note {{property declared here}} 77@property(assign) id z; 78@end 79 80@implementation Gorf 81@synthesize x; 82@synthesize y; // expected-note {{property synthesized here}} 83@synthesize z; 84@end 85 86@interface Gorf2 { 87 id __unsafe_unretained x; 88 id y; // expected-error {{existing instance variable 'y' for property 'y' with unsafe_unretained attribute must be __unsafe_unretained}} 89} 90@property(unsafe_unretained) id __unsafe_unretained x; 91@property(unsafe_unretained) id y; // expected-note {{property declared here}} 92@property(unsafe_unretained) id z; 93@end 94 95@implementation Gorf2 96@synthesize x; 97@synthesize y; // expected-note {{property synthesized here}} 98@synthesize z; 99@end 100 101// rdar://9355230 102@interface I { 103 char _isAutosaving; 104} 105@property char isAutosaving; 106 107@end 108 109@implementation I 110@synthesize isAutosaving = _isAutosaving; 111@end 112 113// rdar://10239594 114// Test for 'Class' properties being unretained. 115@interface MyClass { 116@private 117 Class _controllerClass; 118 id _controllerId; 119} 120@property (copy) Class controllerClass; 121@property (copy) id controllerId; 122@end 123 124@implementation MyClass 125@synthesize controllerClass = _controllerClass; 126@synthesize controllerId = _controllerId; 127@end 128 129// rdar://10630891 130@interface UIView @end 131@class UIColor; 132 133@interface UIView(UIViewRendering) 134@property(nonatomic,copy) UIColor *backgroundColor; 135@end 136 137@interface UILabel : UIView 138@end 139 140@interface MyView 141@property (strong) UILabel *label; 142@end 143 144@interface MyView2 : MyView @end 145 146@implementation MyView2 147- (void)foo { 148 super.label.backgroundColor = 0; 149} 150@end 151 152// rdar://10694932 153@interface Baz 154@property id prop; 155@property __strong id strong_prop; 156@property (strong) id strong_attr_prop; 157@property (strong) __strong id really_strong_attr_prop; 158+ (id) alloc; 159- (id) init; 160- (id) implicit; 161- (void) setImplicit : (id) arg; 162@end 163 164void foo(Baz *f) { 165 f.prop = [[Baz alloc] init]; 166 f.strong_prop = [[Baz alloc] init]; 167 f.strong_attr_prop = [[Baz alloc] init]; 168 f.really_strong_attr_prop = [[Baz alloc] init]; 169 f.implicit = [[Baz alloc] init]; 170} 171 172// rdar://11253688 173@interface Boom 174{ 175 const void * innerPointerIvar __attribute__((objc_returns_inner_pointer)); // expected-error {{'objc_returns_inner_pointer' attribute only applies to methods and properties}} 176} 177@property (readonly) Boom * NotInnerPointer __attribute__((objc_returns_inner_pointer)); // expected-warning {{'objc_returns_inner_pointer' attribute only applies to properties that return a non-retainable pointer}} 178- (Boom *) NotInnerPointerMethod __attribute__((objc_returns_inner_pointer)); // expected-warning {{'objc_returns_inner_pointer' attribute only applies to methods that return a non-retainable pointer}} 179@property (readonly) const void * innerPointer __attribute__((objc_returns_inner_pointer)); 180@end 181 182@interface Foo2 { 183 id _prop; // expected-error {{existing instance variable '_prop' for property 'prop' with assign attribute must be __unsafe_unretained}} 184} 185@property (nonatomic, assign) id prop; // expected-note {{property declared here}} 186@end 187 188@implementation Foo2 189@end 190 191// rdar://13885083 192@interface NSObject 193-(id)init; 194@end 195 196typedef char BOOL; 197@interface Test13885083 : NSObject 198 199@property (nonatomic, assign) BOOL retain; // expected-error {{ARC forbids synthesis of 'retain'}} 200 201-(id)init; 202 203@end 204 205@implementation Test13885083 206-(id) init 207{ 208 self = [super init]; 209 return self; 210} 211@end 212 213