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