blob: f69ac6dace431106fad9824cf82bae3d1b57e009 [file] [log] [blame]
Fariborz Jahaniancea06d22012-06-20 22:57:42 +00001// RUN: %clang_cc1 -fsyntax-only -Weverything -verify %s
2// rdar://11656982
3/** Normally, a property cannot be both 'readonly' and having a "write" attribute
4 (copy/retain/etc.). But, property declaration in primary class and protcols
5 are tentative as they may be overridden into a 'readwrite' property in class
6 extensions. Postpone diagnosing such warnings until the class implementation
7 is seen.
8*/
9
10@interface Super {
11}
12@end
13
14@class NSString;
15
16@interface MyClass : Super
17@property(nonatomic, copy, readonly) NSString *prop;
Fariborz Jahanianc78ff272012-06-20 23:18:57 +000018@property(nonatomic, copy, readonly) id warnProp; // expected-warning {{property attributes 'readonly' and 'copy' are mutually exclusive}}
Fariborz Jahaniancea06d22012-06-20 22:57:42 +000019@end
20
21@interface MyClass ()
22@property(nonatomic, copy, readwrite) NSString *prop;
23@end
24
25@implementation MyClass
26@synthesize prop;
Fariborz Jahanianc78ff272012-06-20 23:18:57 +000027@synthesize warnProp;
Fariborz Jahaniancea06d22012-06-20 22:57:42 +000028@end
29
30
31@protocol P
32@property(nonatomic, copy, readonly) NSString *prop;
Fariborz Jahanianc78ff272012-06-20 23:18:57 +000033@property(nonatomic, copy, readonly) id warnProp; // expected-warning {{property attributes 'readonly' and 'copy' are mutually exclusive}}
Fariborz Jahaniancea06d22012-06-20 22:57:42 +000034@end
35
36@interface YourClass : Super <P>
37@end
38
39@interface YourClass ()
40@property(nonatomic, copy, readwrite) NSString *prop;
41@end
42
43@implementation YourClass
44@synthesize prop;
Fariborz Jahanianc78ff272012-06-20 23:18:57 +000045@synthesize warnProp;
Fariborz Jahaniancea06d22012-06-20 22:57:42 +000046@end
47