144 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -Wobjc-missing-property-synthesis -verify -Wno-objc-root-class %s
 | |
| // rdar://11295716
 | |
| 
 | |
| @interface NSObject 
 | |
| - (void) release;
 | |
| - (id) retain;
 | |
| @end
 | |
| @class NSString;
 | |
| 
 | |
| @interface SynthItAll : NSObject
 | |
| @property int howMany; // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
 | |
| @property (retain) NSString* what; // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
 | |
| @end
 | |
| 
 | |
| @implementation SynthItAll // expected-note 2 {{detected while default synthesizing properties in class implementation}}
 | |
| //@synthesize howMany, what;
 | |
| @end
 | |
| 
 | |
| 
 | |
| @interface SynthSetter : NSObject
 | |
| @property (nonatomic) int howMany;   // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
 | |
| @property (nonatomic, retain) NSString* what;  // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
 | |
| @end
 | |
| 
 | |
| @implementation SynthSetter // expected-note 2 {{detected while default synthesizing properties in class implementation}}
 | |
| //@synthesize howMany, what;
 | |
| 
 | |
| - (int) howMany {
 | |
|     return _howMany;
 | |
| }
 | |
| // - (void) setHowMany: (int) value
 | |
| 
 | |
| - (NSString*) what {
 | |
|     return _what;
 | |
| }
 | |
| // - (void) setWhat: (NSString*) value    
 | |
| @end
 | |
| 
 | |
| 
 | |
| @interface SynthGetter : NSObject
 | |
| @property (nonatomic) int howMany; // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}} 
 | |
| @property (nonatomic, retain) NSString* what; // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
 | |
| @end
 | |
| 
 | |
| @implementation SynthGetter // expected-note 2 {{detected while default synthesizing properties in class implementation}}
 | |
| //@synthesize howMany, what;
 | |
| 
 | |
| // - (int) howMany
 | |
| - (void) setHowMany: (int) value {
 | |
|     _howMany = value;
 | |
| }
 | |
| 
 | |
| // - (NSString*) what
 | |
| - (void) setWhat: (NSString*) value {
 | |
|     if (_what != value) {
 | |
|         [_what release];
 | |
|         _what = [value retain];
 | |
|     }
 | |
| }
 | |
| @end
 | |
| 
 | |
| 
 | |
| @interface SynthNone : NSObject
 | |
| @property int howMany;
 | |
| @property (retain) NSString* what;
 | |
| @end
 | |
| 
 | |
| @implementation SynthNone
 | |
| //@synthesize howMany, what;  // REM: Redundant anyway
 | |
| 
 | |
| - (int) howMany {
 | |
|     return howMany; // expected-error {{use of undeclared identifier 'howMany'}}
 | |
| }
 | |
| - (void) setHowMany: (int) value {
 | |
|     howMany = value; // expected-error {{use of undeclared identifier 'howMany'}}
 | |
| }
 | |
| 
 | |
| - (NSString*) what {
 | |
|     return what; // expected-error {{use of undeclared identifier 'what'}}
 | |
| }
 | |
| - (void) setWhat: (NSString*) value {
 | |
|     if (what != value) { // expected-error {{use of undeclared identifier 'what'}}
 | |
|         [what release]; // expected-error {{use of undeclared identifier 'what'}}
 | |
|         what = [value retain]; // expected-error {{use of undeclared identifier 'what'}}
 | |
|     }
 | |
| }
 | |
| @end
 | |
| 
 | |
| // rdar://8349319
 | |
| // No default synthesis if implementation has getter (readonly) and setter(readwrite) methods.
 | |
| @interface DSATextSearchResult 
 | |
| @property(assign,readonly) float relevance;
 | |
| @property(assign,readonly) char isTitleMatch;
 | |
| @end
 | |
| 
 | |
| @interface DSANodeSearchResult : DSATextSearchResult {}
 | |
| @end
 | |
| 
 | |
| 
 | |
| @implementation DSATextSearchResult 
 | |
| -(char)isTitleMatch {
 | |
|     return (char)0;
 | |
| }
 | |
| 
 | |
| -(float)relevance {
 | |
|     return 0.0;
 | |
| }
 | |
| @end
 | |
| 
 | |
| @implementation DSANodeSearchResult
 | |
| -(id)initWithNode:(id )node relevance:(float)relevance isTitleMatch:(char)isTitleMatch {
 | |
|         relevance = 0.0;        
 | |
|         isTitleMatch = 'a';
 | |
| 	return self;
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface rdar11333367
 | |
| @property enum A x; // expected-note {{forward declaration of 'enum A'}} expected-note {{property declared here}}
 | |
| @property struct B y; // expected-note {{forward declaration of 'struct B'}} expected-note {{property declared here}} \
 | |
|                       // expected-warning {{auto property synthesis is synthesizing property not explicitly synthesized}}
 | |
| @end
 | |
| @implementation rdar11333367 // expected-error {{cannot synthesize property 'y' with incomplete type 'struct B'}} \
 | |
|                              // expected-note {{detected while default synthesizing properties in class implementation}}
 | |
| @synthesize x; // expected-error {{cannot synthesize property 'x' with incomplete type 'enum A'}}
 | |
| @end
 | |
| 
 | |
| // rdar://17774815
 | |
| @interface ZXParsedResult
 | |
| @property (nonatomic, copy, readonly) NSString *description; // expected-note {{property declared here}}
 | |
| @end
 | |
| 
 | |
| @interface ZXCalendarParsedResult : ZXParsedResult
 | |
| 
 | |
| @property (nonatomic, copy, readonly) NSString *description; // expected-warning {{auto property synthesis will not synthesize property 'description'; it will be implemented by its superclass}}
 | |
| 
 | |
| @end
 | |
| 
 | |
| @implementation ZXCalendarParsedResult // expected-note {{detected while default synthesizing properties in class implementation}}
 | |
| - (NSString *) Meth {
 | |
|     return _description; // expected-error {{use of undeclared identifier '_description'}}
 | |
| }
 | |
| @end
 |