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