1 | // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s |
2 | |
3 | @interface ReadOnly |
4 | { |
5 | id _object; |
6 | id _object1; |
7 | } |
8 | @property(readonly) id object; |
9 | @property(readwrite, assign) id object1; // expected-note {{property declared here}} |
10 | @property (readonly) int indentLevel; |
11 | @end |
12 | |
13 | @interface ReadOnly () |
14 | @property(readwrite, copy) id object; // Ok. declaring memory model in class extension - primary has none. |
15 | @property(readonly) id object1; // expected-error {{illegal redeclaration of property in class extension 'ReadOnly' (attribute must be 'readwrite', while its primary must be 'readonly')}} |
16 | @property (readwrite, assign) int indentLevel; // OK. assign the default in any case. |
17 | @end |
18 | |
19 | @protocol Proto |
20 | @property (copy) id fee; // expected-note {{property declared here}} |
21 | @end |
22 | |
23 | @protocol Foo<Proto> |
24 | @property (copy) id foo; // expected-note {{property declared here}} |
25 | @end |
26 | |
27 | @interface Bar <Foo> { |
28 | id _foo; |
29 | id _fee; |
30 | } |
31 | @end |
32 | |
33 | @interface Bar () |
34 | @property (copy) id foo; // expected-error {{illegal redeclaration of property in class extension 'Bar' (attribute must be 'readwrite', while its primary must be 'readonly')}} |
35 | @property (copy) id fee; // expected-error {{illegal redeclaration of property in class extension 'Bar' (attribute must be 'readwrite', while its primary must be 'readonly')}} |
36 | @end |
37 | |
38 | @implementation Bar |
39 | @synthesize foo = _foo; |
40 | @synthesize fee = _fee; |
41 | @end |
42 | |
43 | // rdar://10752081 |
44 | @interface MyOtherClass() // expected-error {{cannot find interface declaration for 'MyOtherClass'}} |
45 | { |
46 | id array; |
47 | } |
48 | @end |
49 | |
50 | @implementation MyOtherClass // expected-warning {{cannot find interface declaration for 'MyOtherClass'}} |
51 | @end |
52 | |