| // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s |
| |
| @interface ReadOnly |
| { |
| id _object; |
| id _object1; |
| } |
| @property(readonly) id object; |
| @property(readwrite, assign) id object1; // expected-note {{property declared here}} |
| @property (readonly) int indentLevel; |
| @end |
| |
| @interface ReadOnly () |
| @property(readwrite, copy) id object; // Ok. declaring memory model in class extension - primary has none. |
| @property(readonly) id object1; // expected-error {{illegal redeclaration of property in class extension 'ReadOnly' (attribute must be 'readwrite', while its primary must be 'readonly')}} |
| @property (readwrite, assign) int indentLevel; // OK. assign the default in any case. |
| @end |
| |
| @protocol Proto |
| @property (copy) id fee; // expected-note {{property declared here}} |
| @end |
| |
| @protocol Foo<Proto> |
| @property (copy) id foo; // expected-note {{property declared here}} |
| @end |
| |
| @interface Bar <Foo> { |
| id _foo; |
| id _fee; |
| } |
| @end |
| |
| @interface Bar () |
| @property (copy) id foo; // expected-error {{illegal redeclaration of property in class extension 'Bar' (attribute must be 'readwrite', while its primary must be 'readonly')}} |
| @property (copy) id fee; // expected-error {{illegal redeclaration of property in class extension 'Bar' (attribute must be 'readwrite', while its primary must be 'readonly')}} |
| @end |
| |
| @implementation Bar |
| @synthesize foo = _foo; |
| @synthesize fee = _fee; |
| @end |
| |
| // rdar://10752081 |
| @interface MyOtherClass() // expected-error {{cannot find interface declaration for 'MyOtherClass'}} |
| { |
| id array; |
| } |
| @end |
| |
| @implementation MyOtherClass // expected-warning {{cannot find interface declaration for 'MyOtherClass'}} |
| @end |