Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -x objective-c -fsyntax-only -fobjc-default-synthesize-properties -verify -Wno-objc-root-class %s
      2 // RUN: %clang_cc1 -x objective-c++ -fsyntax-only -fobjc-default-synthesize-properties -verify -Wno-objc-root-class %s
      3 
      4 #if __has_attribute(objc_requires_property_definitions)
      5 __attribute ((objc_requires_property_definitions)) 
      6 #endif
      7 @interface NoAuto // expected-note 2 {{class with specified objc_requires_property_definitions attribute is declared here}}
      8 @property int NoAutoProp; // expected-note 2 {{property declared here}}
      9 @end
     10 
     11 @implementation NoAuto  // expected-warning {{property 'NoAutoProp' requires method 'NoAutoProp' to be defined}} \
     12                         // expected-warning {{property 'NoAutoProp' requires method 'setNoAutoProp:'}}
     13 @end
     14 
     15 __attribute ((objc_requires_property_definitions))  // redundant, just for testing
     16 @interface Sub : NoAuto  // expected-note 3 {{class with specified objc_requires_property_definitions attribute is declared here}}
     17 @property (copy) id SubProperty; // expected-note 2 {{property declared here}}
     18 @end
     19 
     20 @implementation Sub // expected-warning {{property 'SubProperty' requires method 'SubProperty' to be defined}} \
     21                     // expected-warning {{property 'SubProperty' requires method 'setSubProperty:' to be defined}}
     22 @end
     23 
     24 @interface Deep : Sub
     25 @property (copy) id DeepProperty;
     26 @property (copy) id DeepSynthProperty;
     27 @property (copy) id DeepMustSynthProperty; // expected-note {{property declared here}}
     28 @end
     29 
     30 @implementation Deep // expected-warning {{property 'DeepMustSynthProperty' requires method 'setDeepMustSynthProperty:' to be defined}}
     31 @dynamic DeepProperty;
     32 @synthesize DeepSynthProperty;
     33 - (id) DeepMustSynthProperty { return 0; }
     34 @end
     35 
     36 __attribute ((objc_requires_property_definitions)) 
     37 @interface Deep(CAT)  // expected-error {{attributes may not be specified on a category}}
     38 @end
     39 
     40 __attribute ((objc_requires_property_definitions)) // expected-error {{objc_requires_property_definitions attribute may only be specified on a class}} 
     41 @protocol P @end
     42