1 // RUN: %clang_cc1 -verify %s 2 3 @interface I 4 { 5 id d1; 6 } 7 @property (readwrite, copy) id d1; 8 @property (readwrite, copy) id d2; 9 @end 10 11 @interface NOW : I 12 @property (readonly) id d1; // expected-warning {{attribute 'readonly' of property 'd1' restricts attribute 'readwrite' of property inherited from 'I'}} expected-warning {{'copy' attribute on property 'd1' does not match the property inherited from 'I'}} 13 @property (readwrite, copy) I* d2; 14 @end 15 16 // rdar://13156292 17 typedef signed char BOOL; 18 19 @protocol EKProtocolCalendar 20 @property (nonatomic, readonly) BOOL allowReminders; 21 @property (atomic, readonly) BOOL allowNonatomicProperty; // expected-note {{property declared here}} 22 @end 23 24 @protocol EKProtocolMutableCalendar <EKProtocolCalendar> 25 @end 26 27 @interface EKCalendar 28 @end 29 30 @interface EKCalendar () <EKProtocolMutableCalendar> 31 @property (nonatomic, assign) BOOL allowReminders; 32 @property (nonatomic, assign) BOOL allowNonatomicProperty; // expected-warning {{'atomic' attribute on property 'allowNonatomicProperty' does not match the property inherited from 'EKProtocolCalendar'}} 33 @end 34 35 __attribute__((objc_root_class)) 36 @interface A 37 @property (nonatomic, readonly, getter=isAvailable) int available; // expected-note{{property declared here}} 38 @end 39 40 @interface A () 41 @property (nonatomic, assign, getter=wasAvailable) int available; // expected-warning{{getter name mismatch between property redeclaration ('wasAvailable') and its original declaration ('isAvailable')}} 42 @end 43