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; 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; 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