Home | History | Annotate | Download | only in SemaObjC
      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