Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -Wobjc-missing-property-synthesis -verify -Wno-objc-root-class %s
      2 // rdar://11295716
      3 
      4 @interface NSObject 
      5 - (void) release;
      6 - (id) retain;
      7 @end
      8 @class NSString;
      9 
     10 @interface SynthItAll : NSObject
     11 @property int howMany; // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
     12 @property (retain) NSString* what; // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
     13 @end
     14 
     15 @implementation SynthItAll // expected-note 2 {{detected while default synthesizing properties in class implementation}}
     16 //@synthesize howMany, what;
     17 @end
     18 
     19 
     20 @interface SynthSetter : NSObject
     21 @property (nonatomic) int howMany;   // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
     22 @property (nonatomic, retain) NSString* what;  // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
     23 @end
     24 
     25 @implementation SynthSetter // expected-note 2 {{detected while default synthesizing properties in class implementation}}
     26 //@synthesize howMany, what;
     27 
     28 - (int) howMany {
     29     return _howMany;
     30 }
     31 // - (void) setHowMany: (int) value
     32 
     33 - (NSString*) what {
     34     return _what;
     35 }
     36 // - (void) setWhat: (NSString*) value    
     37 @end
     38 
     39 
     40 @interface SynthGetter : NSObject
     41 @property (nonatomic) int howMany; // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}} 
     42 @property (nonatomic, retain) NSString* what; // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
     43 @end
     44 
     45 @implementation SynthGetter // expected-note 2 {{detected while default synthesizing properties in class implementation}}
     46 //@synthesize howMany, what;
     47 
     48 // - (int) howMany
     49 - (void) setHowMany: (int) value {
     50     _howMany = value;
     51 }
     52 
     53 // - (NSString*) what
     54 - (void) setWhat: (NSString*) value {
     55     if (_what != value) {
     56         [_what release];
     57         _what = [value retain];
     58     }
     59 }
     60 @end
     61 
     62 
     63 @interface SynthNone : NSObject
     64 @property int howMany;
     65 @property (retain) NSString* what;
     66 @end
     67 
     68 @implementation SynthNone
     69 //@synthesize howMany, what;  // REM: Redundant anyway
     70 
     71 - (int) howMany {
     72     return howMany; // expected-error {{use of undeclared identifier 'howMany'}}
     73 }
     74 - (void) setHowMany: (int) value {
     75     howMany = value; // expected-error {{use of undeclared identifier 'howMany'}}
     76 }
     77 
     78 - (NSString*) what {
     79     return what; // expected-error {{use of undeclared identifier 'what'}}
     80 }
     81 - (void) setWhat: (NSString*) value {
     82     if (what != value) { // expected-error {{use of undeclared identifier 'what'}}
     83         [what release]; // expected-error {{use of undeclared identifier 'what'}}
     84         what = [value retain]; // expected-error {{use of undeclared identifier 'what'}}
     85     }
     86 }
     87 @end
     88 
     89 // rdar://8349319
     90 // No default synthesis if implementation has getter (readonly) and setter(readwrite) methods.
     91 @interface DSATextSearchResult 
     92 @property(assign,readonly) float relevance;
     93 @property(assign,readonly) char isTitleMatch;
     94 @end
     95 
     96 @interface DSANodeSearchResult : DSATextSearchResult {}
     97 @end
     98 
     99 
    100 @implementation DSATextSearchResult 
    101 -(char)isTitleMatch {
    102     return (char)0;
    103 }
    104 
    105 -(float)relevance {
    106     return 0.0;
    107 }
    108 @end
    109 
    110 @implementation DSANodeSearchResult
    111 -(id)initWithNode:(id )node relevance:(float)relevance isTitleMatch:(char)isTitleMatch {
    112         relevance = 0.0;        
    113         isTitleMatch = 'a';
    114 	return self;
    115 }
    116 @end
    117 
    118 @interface rdar11333367
    119 @property enum A x; // expected-note {{forward declaration of 'enum A'}} expected-note {{property declared here}}
    120 @property struct B y; // expected-note {{forward declaration of 'struct B'}} expected-note {{property declared here}} \
    121                       // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
    122 @end
    123 @implementation rdar11333367 // expected-error {{cannot synthesize property 'y' with incomplete type 'struct B'}} \
    124                              // expected-note {{detected while default synthesizing properties in class implementation}}
    125 @synthesize x; // expected-error {{cannot synthesize property 'x' with incomplete type 'enum A'}}
    126 @end
    127 
    128 // rdar://17774815
    129 @interface ZXParsedResult
    130 @property (nonatomic, copy, readonly) NSString *description; // expected-note {{property declared here}}
    131 @end
    132 
    133 @interface ZXCalendarParsedResult : ZXParsedResult
    134 
    135 @property (nonatomic, copy, readonly) NSString *description; // expected-warning {{auto property synthesis will not synthesize property 'description'; it will be implemented by its superclass}}
    136 
    137 @end
    138 
    139 @implementation ZXCalendarParsedResult // expected-note {{detected while default synthesizing properties in class implementation}}
    140 - (NSString *) Meth {
    141     return _description; // expected-error {{use of undeclared identifier '_description'}}
    142 }
    143 @end
    144