1// 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; // expected-warning {{property attributes 'readonly' and 'copy' are mutually exclusive}}
18@property(nonatomic, copy, readonly) id warnProp; // expected-warning {{property attributes 'readonly' and 'copy' are mutually exclusive}}
19@end
20
21@interface MyClass ()
22@property(nonatomic, copy, readwrite) NSString *prop;
23@end
24
25@implementation MyClass
26@synthesize prop;
27@synthesize warnProp;
28@end
29
30
31@protocol P
32@property(nonatomic, copy, readonly) NSString *prop; // expected-warning {{property attributes 'readonly' and 'copy' are mutually exclusive}}
33@property(nonatomic, copy, readonly) id warnProp; // expected-warning {{property attributes 'readonly' and 'copy' are mutually exclusive}}
34@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;
45@synthesize warnProp;
46@end
47
48