378 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			378 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
 | |
| 
 | |
| /*
 | |
|   Conditions for warning:
 | |
|   1. the property is atomic
 | |
|   2. the current @implementation contains an @synthesize for the property
 | |
|   3. the current @implementation contains a hand-written setter XOR getter
 | |
|   4. the property is read-write
 | |
|   
 | |
|   Cases marked WARN should warn one the following:
 | |
|   warning: Atomic property 'x' has a synthesized setter and a 
 | |
|   manually-implemented getter, which may break atomicity.
 | |
|   warning: Atomic property 'x' has a synthesized getter and a 
 | |
|   manually-implemented setter, which may break atomicity.
 | |
|   
 | |
|   Cases not marked WARN only satisfy the indicated subset 
 | |
|   of the conditions required to warn.
 | |
| 
 | |
|   There should be 8 warnings.
 | |
| */
 | |
| 
 | |
| @interface Foo 
 | |
| {
 | |
|     /* 12 4 */    int GetSet;
 | |
|     /* WARN */    int Get;
 | |
|     /* WARN */    int Set;
 | |
|     /* 12 4 */    int None;
 | |
|     /*  2 4 */    int GetSet_Nonatomic;
 | |
|     /*  234 */    int Get_Nonatomic;
 | |
|     /*  234 */    int Set_Nonatomic;
 | |
|     /*  2 4 */    int None_Nonatomic;
 | |
| 
 | |
|     /* 12   */    int GetSet_ReadOnly;
 | |
|     /* 123  */    int Get_ReadOnly;
 | |
|     /* 123  */    int Set_ReadOnly;
 | |
|     /* 12   */    int None_ReadOnly;
 | |
|     /*  2   */    int GetSet_Nonatomic_ReadOnly;
 | |
|     /*  23  */    int Get_Nonatomic_ReadOnly;
 | |
|     /*  23  */    int Set_Nonatomic_ReadOnly;
 | |
|     /*  2   */    int None_Nonatomic_ReadOnly;
 | |
| 
 | |
|     /* 12 4 */    int GetSet_ReadWriteInExt;
 | |
|     /* WARN */    int Get_ReadWriteInExt;
 | |
|     /* WARN */    int Set_ReadWriteInExt;
 | |
|     /* 12 4 */    int None_ReadWriteInExt;
 | |
|     /*  2 4 */    int GetSet_Nonatomic_ReadWriteInExt;
 | |
|     /*  234 */    int Get_Nonatomic_ReadWriteInExt;
 | |
|     /*  234 */    int Set_Nonatomic_ReadWriteInExt;
 | |
|     /*  2 4 */    int None_Nonatomic_ReadWriteInExt;
 | |
| 
 | |
| 
 | |
|     /* 12 4 */    int GetSet_LateSynthesize;
 | |
|     /* WARN */    int Get_LateSynthesize;
 | |
|     /* WARN */    int Set_LateSynthesize;
 | |
|     /* 12 4 */    int None_LateSynthesize;
 | |
|     /*  2 4 */    int GetSet_Nonatomic_LateSynthesize;
 | |
|     /*  234 */    int Get_Nonatomic_LateSynthesize;
 | |
|     /*  234 */    int Set_Nonatomic_LateSynthesize;
 | |
|     /*  2 4 */    int None_Nonatomic_LateSynthesize;
 | |
| 
 | |
|     /* 12   */    int GetSet_ReadOnly_LateSynthesize;
 | |
|     /* 123  */    int Get_ReadOnly_LateSynthesize;
 | |
|     /* 123  */    int Set_ReadOnly_LateSynthesize;
 | |
|     /* 12   */    int None_ReadOnly_LateSynthesize;
 | |
|     /*  2   */    int GetSet_Nonatomic_ReadOnly_LateSynthesize;
 | |
|     /*  23  */    int Get_Nonatomic_ReadOnly_LateSynthesize;
 | |
|     /*  23  */    int Set_Nonatomic_ReadOnly_LateSynthesize;
 | |
|     /*  2   */    int None_Nonatomic_ReadOnly_LateSynthesize;
 | |
| 
 | |
|     /* 12 4 */    int GetSet_ReadWriteInExt_LateSynthesize;
 | |
|     /* WARN */    int Get_ReadWriteInExt_LateSynthesize;
 | |
|     /* WARN */    int Set_ReadWriteInExt_LateSynthesize;
 | |
|     /* 12 4 */    int None_ReadWriteInExt_LateSynthesize;
 | |
|     /*  2 4 */    int GetSet_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
|     /*  234 */    int Get_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
|     /*  234 */    int Set_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
|     /*  2 4 */    int None_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| 
 | |
| 
 | |
|     /* 1  4 */    int GetSet_NoSynthesize;
 | |
|     /* 1 34 */    int Get_NoSynthesize;
 | |
|     /* 1 34 */    int Set_NoSynthesize;
 | |
|     /* 1  4 */    int None_NoSynthesize;
 | |
|     /*    4 */    int GetSet_Nonatomic_NoSynthesize;
 | |
|     /*   34 */    int Get_Nonatomic_NoSynthesize;
 | |
|     /*   34 */    int Set_Nonatomic_NoSynthesize;
 | |
|     /*    4 */    int None_Nonatomic_NoSynthesize;
 | |
| 
 | |
|     /* 1    */    int GetSet_ReadOnly_NoSynthesize;
 | |
|     /* 1 3  */    int Get_ReadOnly_NoSynthesize;
 | |
|     /* 1 3  */    int Set_ReadOnly_NoSynthesize;
 | |
|     /* 1    */    int None_ReadOnly_NoSynthesize;
 | |
|     /*      */    int GetSet_Nonatomic_ReadOnly_NoSynthesize;
 | |
|     /*   3  */    int Get_Nonatomic_ReadOnly_NoSynthesize;
 | |
|     /*   3  */    int Set_Nonatomic_ReadOnly_NoSynthesize;
 | |
|     /*      */    int None_Nonatomic_ReadOnly_NoSynthesize;
 | |
| 
 | |
|     /* 1  4 */    int GetSet_ReadWriteInExt_NoSynthesize;
 | |
|     /* 1 34 */    int Get_ReadWriteInExt_NoSynthesize;
 | |
|     /* 1 34 */    int Set_ReadWriteInExt_NoSynthesize;
 | |
|     /* 1  4 */    int None_ReadWriteInExt_NoSynthesize;
 | |
|     /*    4 */    int GetSet_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
|     /*   34 */    int Get_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
|     /*   34 */    int Set_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
|     /*    4 */    int None_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| }
 | |
| 
 | |
| // read-write - might warn
 | |
| @property int GetSet;
 | |
| @property int Get;	// expected-note {{property declared here}} \
 | |
|                         // expected-note {{setter and getter must both be synthesized}}
 | |
| @property int Set;	// expected-note {{property declared here}} \
 | |
|                         // expected-note {{setter and getter must both be synthesized}}
 | |
| @property int None;
 | |
| @property(nonatomic) int GetSet_Nonatomic;
 | |
| @property(nonatomic) int Get_Nonatomic;
 | |
| @property(nonatomic) int Set_Nonatomic;
 | |
| @property(nonatomic) int None_Nonatomic;
 | |
| 
 | |
| // read-only - must not warn
 | |
| @property(readonly) int GetSet_ReadOnly;
 | |
| @property(readonly) int Get_ReadOnly;
 | |
| @property(readonly) int Set_ReadOnly;
 | |
| @property(readonly) int None_ReadOnly;
 | |
| @property(nonatomic,readonly) int GetSet_Nonatomic_ReadOnly;
 | |
| @property(nonatomic,readonly) int Get_Nonatomic_ReadOnly;
 | |
| @property(nonatomic,readonly) int Set_Nonatomic_ReadOnly;
 | |
| @property(nonatomic,readonly) int None_Nonatomic_ReadOnly;
 | |
| 
 | |
| // read-only in class, read-write in class extension - might warn
 | |
| @property(readonly) int GetSet_ReadWriteInExt;
 | |
| @property(readonly) int Get_ReadWriteInExt;
 | |
| @property(readonly) int Set_ReadWriteInExt;
 | |
| @property(readonly) int None_ReadWriteInExt;
 | |
| @property(nonatomic,readonly) int GetSet_Nonatomic_ReadWriteInExt;
 | |
| @property(nonatomic,readonly) int Get_Nonatomic_ReadWriteInExt;
 | |
| @property(nonatomic,readonly) int Set_Nonatomic_ReadWriteInExt;
 | |
| @property(nonatomic,readonly) int None_Nonatomic_ReadWriteInExt;
 | |
| 
 | |
| 
 | |
| // same as above, but @synthesize follows the hand-written methods - might warn
 | |
| @property int GetSet_LateSynthesize;
 | |
| @property int Get_LateSynthesize;	// expected-note {{property declared here}} \
 | |
|                                         // expected-note {{setter and getter must both be synthesized}}
 | |
| @property int Set_LateSynthesize;	// expected-note {{property declared here}} \
 | |
|                                         // expected-note {{setter and getter must both be synthesized}}
 | |
| @property int None_LateSynthesize;
 | |
| @property(nonatomic) int GetSet_Nonatomic_LateSynthesize;
 | |
| @property(nonatomic) int Get_Nonatomic_LateSynthesize;
 | |
| @property(nonatomic) int Set_Nonatomic_LateSynthesize;
 | |
| @property(nonatomic) int None_Nonatomic_LateSynthesize;
 | |
| 
 | |
| @property(readonly) int GetSet_ReadOnly_LateSynthesize;
 | |
| @property(readonly) int Get_ReadOnly_LateSynthesize;
 | |
| @property(readonly) int Set_ReadOnly_LateSynthesize;
 | |
| @property(readonly) int None_ReadOnly_LateSynthesize;
 | |
| @property(nonatomic,readonly) int GetSet_Nonatomic_ReadOnly_LateSynthesize;
 | |
| @property(nonatomic,readonly) int Get_Nonatomic_ReadOnly_LateSynthesize;
 | |
| @property(nonatomic,readonly) int Set_Nonatomic_ReadOnly_LateSynthesize;
 | |
| @property(nonatomic,readonly) int None_Nonatomic_ReadOnly_LateSynthesize;
 | |
| 
 | |
| @property(readonly) int GetSet_ReadWriteInExt_LateSynthesize;
 | |
| @property(readonly) int Get_ReadWriteInExt_LateSynthesize;
 | |
| @property(readonly) int Set_ReadWriteInExt_LateSynthesize;
 | |
| @property(readonly) int None_ReadWriteInExt_LateSynthesize;
 | |
| @property(nonatomic,readonly) int GetSet_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| @property(nonatomic,readonly) int Get_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| @property(nonatomic,readonly) int Set_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| @property(nonatomic,readonly) int None_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| 
 | |
| 
 | |
| // same as above, but with no @synthesize - must not warn
 | |
| @property int GetSet_NoSynthesize;
 | |
| @property int Get_NoSynthesize;
 | |
| @property int Set_NoSynthesize;
 | |
| @property int None_NoSynthesize;
 | |
| @property(nonatomic) int GetSet_Nonatomic_NoSynthesize;
 | |
| @property(nonatomic) int Get_Nonatomic_NoSynthesize;
 | |
| @property(nonatomic) int Set_Nonatomic_NoSynthesize;
 | |
| @property(nonatomic) int None_Nonatomic_NoSynthesize;
 | |
| 
 | |
| @property(readonly) int GetSet_ReadOnly_NoSynthesize;
 | |
| @property(readonly) int Get_ReadOnly_NoSynthesize;
 | |
| @property(readonly) int Set_ReadOnly_NoSynthesize;
 | |
| @property(readonly) int None_ReadOnly_NoSynthesize;
 | |
| @property(nonatomic,readonly) int GetSet_Nonatomic_ReadOnly_NoSynthesize;
 | |
| @property(nonatomic,readonly) int Get_Nonatomic_ReadOnly_NoSynthesize;
 | |
| @property(nonatomic,readonly) int Set_Nonatomic_ReadOnly_NoSynthesize;
 | |
| @property(nonatomic,readonly) int None_Nonatomic_ReadOnly_NoSynthesize;
 | |
| 
 | |
| @property(readonly) int GetSet_ReadWriteInExt_NoSynthesize;
 | |
| @property(readonly) int Get_ReadWriteInExt_NoSynthesize;
 | |
| @property(readonly) int Set_ReadWriteInExt_NoSynthesize;
 | |
| @property(readonly) int None_ReadWriteInExt_NoSynthesize;
 | |
| @property(nonatomic,readonly) int GetSet_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| @property(nonatomic,readonly) int Get_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| @property(nonatomic,readonly) int Set_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| @property(nonatomic,readonly) int None_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| 
 | |
| @end
 | |
| 
 | |
| 
 | |
| @interface Foo ()
 | |
| 
 | |
| @property(readwrite) int GetSet_ReadWriteInExt;
 | |
| @property(readwrite) int Get_ReadWriteInExt; // expected-note {{property declared here}} \
 | |
|                                              // expected-note {{setter and getter must both be synthesized}}
 | |
| @property(readwrite) int Set_ReadWriteInExt; // expected-note {{property declared here}} \
 | |
|                                              // expected-note {{setter and getter must both be synthesized}}
 | |
| @property(readwrite) int None_ReadWriteInExt;
 | |
| @property(nonatomic,readwrite) int GetSet_Nonatomic_ReadWriteInExt;
 | |
| @property(nonatomic,readwrite) int Get_Nonatomic_ReadWriteInExt;
 | |
| @property(nonatomic,readwrite) int Set_Nonatomic_ReadWriteInExt;
 | |
| @property(nonatomic,readwrite) int None_Nonatomic_ReadWriteInExt;
 | |
| 
 | |
| @property(readwrite) int GetSet_ReadWriteInExt_LateSynthesize;
 | |
| @property(readwrite) int Get_ReadWriteInExt_LateSynthesize;  // expected-note {{property declared here}} \
 | |
|                                                              // expected-note {{setter and getter must both be synthesized}}
 | |
| @property(readwrite) int Set_ReadWriteInExt_LateSynthesize; // expected-note {{property declared here}} \
 | |
|                                                             // expected-note {{setter and getter must both be synthesized}}
 | |
| @property(readwrite) int None_ReadWriteInExt_LateSynthesize;
 | |
| @property(nonatomic,readwrite) int GetSet_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| @property(nonatomic,readwrite) int Get_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| @property(nonatomic,readwrite) int Set_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| @property(nonatomic,readwrite) int None_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| 
 | |
| @property(readwrite) int GetSet_ReadWriteInExt_NoSynthesize;
 | |
| @property(readwrite) int Get_ReadWriteInExt_NoSynthesize;
 | |
| @property(readwrite) int Set_ReadWriteInExt_NoSynthesize;
 | |
| @property(readwrite) int None_ReadWriteInExt_NoSynthesize;
 | |
| @property(nonatomic,readwrite) int GetSet_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| @property(nonatomic,readwrite) int Get_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| @property(nonatomic,readwrite) int Set_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| @property(nonatomic,readwrite) int None_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| 
 | |
| @end
 | |
| 
 | |
| @implementation Foo
 | |
| 
 | |
| @synthesize GetSet, Get, Set, None, GetSet_Nonatomic, Get_Nonatomic, Set_Nonatomic, None_Nonatomic;
 | |
| @synthesize GetSet_ReadOnly, Get_ReadOnly, Set_ReadOnly, None_ReadOnly, GetSet_Nonatomic_ReadOnly, Get_Nonatomic_ReadOnly, Set_Nonatomic_ReadOnly, None_Nonatomic_ReadOnly;
 | |
| @synthesize GetSet_ReadWriteInExt, Get_ReadWriteInExt, Set_ReadWriteInExt, None_ReadWriteInExt, GetSet_Nonatomic_ReadWriteInExt, Get_Nonatomic_ReadWriteInExt, Set_Nonatomic_ReadWriteInExt, None_Nonatomic_ReadWriteInExt;
 | |
| 
 | |
| #define GET(x) \
 | |
|     -(int) x { return self->x; }  
 | |
| #define SET(x) \
 | |
|     -(void) set##x:(int)value { self->x = value; }  
 | |
| 
 | |
| GET(GetSet)
 | |
| SET(GetSet)
 | |
| GET(Get) // expected-warning {{writable atomic property 'Get' cannot pair a synthesized setter with a user defined getter}} 
 | |
| SET(Set) // expected-warning {{writable atomic property 'Set' cannot pair a synthesized getter with a user defined setter}}
 | |
| GET(GetSet_Nonatomic)
 | |
| SET(GetSet_Nonatomic)
 | |
| GET(Get_Nonatomic)
 | |
| SET(Set_Nonatomic)
 | |
| 
 | |
| GET(GetSet_ReadOnly)
 | |
| SET(GetSet_ReadOnly)
 | |
| GET(Get_ReadOnly)
 | |
| SET(Set_ReadOnly)
 | |
| GET(GetSet_Nonatomic_ReadOnly)
 | |
| SET(GetSet_Nonatomic_ReadOnly)
 | |
| GET(Get_Nonatomic_ReadOnly)
 | |
| SET(Set_Nonatomic_ReadOnly)
 | |
| 
 | |
| GET(GetSet_ReadWriteInExt)
 | |
| SET(GetSet_ReadWriteInExt)
 | |
| GET(Get_ReadWriteInExt) // expected-warning {{writable atomic property 'Get_ReadWriteInExt' cannot pair a synthesized setter with a user defined getter}} 
 | |
| SET(Set_ReadWriteInExt) // expected-warning {{writable atomic property 'Set_ReadWriteInExt' cannot pair a synthesized getter with a user defined setter}}
 | |
| GET(GetSet_Nonatomic_ReadWriteInExt)
 | |
| SET(GetSet_Nonatomic_ReadWriteInExt)
 | |
| GET(Get_Nonatomic_ReadWriteInExt)
 | |
| SET(Set_Nonatomic_ReadWriteInExt)
 | |
| 
 | |
| 
 | |
| GET(GetSet_LateSynthesize)
 | |
| SET(GetSet_LateSynthesize)
 | |
| GET(Get_LateSynthesize) // expected-warning {{writable atomic property 'Get_LateSynthesize' cannot pair a synthesized setter with a user defined getter}} 
 | |
| SET(Set_LateSynthesize) // expected-warning {{writable atomic property 'Set_LateSynthesize' cannot pair a synthesized getter with a user defined setter}}
 | |
| GET(GetSet_Nonatomic_LateSynthesize)
 | |
| SET(GetSet_Nonatomic_LateSynthesize)
 | |
| GET(Get_Nonatomic_LateSynthesize)
 | |
| SET(Set_Nonatomic_LateSynthesize)
 | |
| 
 | |
| GET(GetSet_ReadOnly_LateSynthesize)
 | |
| SET(GetSet_ReadOnly_LateSynthesize)
 | |
| GET(Get_ReadOnly_LateSynthesize)
 | |
| SET(Set_ReadOnly_LateSynthesize)
 | |
| GET(GetSet_Nonatomic_ReadOnly_LateSynthesize)
 | |
| SET(GetSet_Nonatomic_ReadOnly_LateSynthesize)
 | |
| GET(Get_Nonatomic_ReadOnly_LateSynthesize)
 | |
| SET(Set_Nonatomic_ReadOnly_LateSynthesize)
 | |
| 
 | |
| GET(GetSet_ReadWriteInExt_LateSynthesize)
 | |
| SET(GetSet_ReadWriteInExt_LateSynthesize)
 | |
| GET(Get_ReadWriteInExt_LateSynthesize) // expected-warning {{writable atomic property 'Get_ReadWriteInExt_LateSynthesize' cannot pair a synthesized setter with a user defined getter}}
 | |
| SET(Set_ReadWriteInExt_LateSynthesize) // expected-warning {{writable atomic property 'Set_ReadWriteInExt_LateSynthesize' cannot pair a synthesized getter with a user defined setter}}
 | |
| GET(GetSet_Nonatomic_ReadWriteInExt_LateSynthesize)
 | |
| SET(GetSet_Nonatomic_ReadWriteInExt_LateSynthesize)
 | |
| GET(Get_Nonatomic_ReadWriteInExt_LateSynthesize)
 | |
| SET(Set_Nonatomic_ReadWriteInExt_LateSynthesize)
 | |
| 
 | |
| 
 | |
| GET(GetSet_NoSynthesize)
 | |
| SET(GetSet_NoSynthesize)
 | |
| GET(Get_NoSynthesize)
 | |
| SET(Set_NoSynthesize)
 | |
| GET(GetSet_Nonatomic_NoSynthesize)
 | |
| SET(GetSet_Nonatomic_NoSynthesize)
 | |
| GET(Get_Nonatomic_NoSynthesize)
 | |
| SET(Set_Nonatomic_NoSynthesize)
 | |
| 
 | |
| GET(GetSet_ReadOnly_NoSynthesize)
 | |
| SET(GetSet_ReadOnly_NoSynthesize)
 | |
| GET(Get_ReadOnly_NoSynthesize)
 | |
| SET(Set_ReadOnly_NoSynthesize)
 | |
| GET(GetSet_Nonatomic_ReadOnly_NoSynthesize)
 | |
| SET(GetSet_Nonatomic_ReadOnly_NoSynthesize)
 | |
| GET(Get_Nonatomic_ReadOnly_NoSynthesize)
 | |
| SET(Set_Nonatomic_ReadOnly_NoSynthesize)
 | |
| 
 | |
| GET(GetSet_ReadWriteInExt_NoSynthesize)
 | |
| SET(GetSet_ReadWriteInExt_NoSynthesize)
 | |
| GET(Get_ReadWriteInExt_NoSynthesize)
 | |
| SET(Set_ReadWriteInExt_NoSynthesize)
 | |
| GET(GetSet_Nonatomic_ReadWriteInExt_NoSynthesize)
 | |
| SET(GetSet_Nonatomic_ReadWriteInExt_NoSynthesize)
 | |
| GET(Get_Nonatomic_ReadWriteInExt_NoSynthesize)
 | |
| SET(Set_Nonatomic_ReadWriteInExt_NoSynthesize)
 | |
| 
 | |
| 
 | |
| // late synthesize - follows getter/setter implementations
 | |
| 
 | |
| @synthesize GetSet_LateSynthesize, Get_LateSynthesize, Set_LateSynthesize, None_LateSynthesize, GetSet_Nonatomic_LateSynthesize, Get_Nonatomic_LateSynthesize, Set_Nonatomic_LateSynthesize, None_Nonatomic_LateSynthesize;
 | |
| @synthesize GetSet_ReadOnly_LateSynthesize, Get_ReadOnly_LateSynthesize, Set_ReadOnly_LateSynthesize, None_ReadOnly_LateSynthesize, GetSet_Nonatomic_ReadOnly_LateSynthesize, Get_Nonatomic_ReadOnly_LateSynthesize, Set_Nonatomic_ReadOnly_LateSynthesize, None_Nonatomic_ReadOnly_LateSynthesize;
 | |
| @synthesize GetSet_ReadWriteInExt_LateSynthesize, Get_ReadWriteInExt_LateSynthesize, Set_ReadWriteInExt_LateSynthesize, None_ReadWriteInExt_LateSynthesize, GetSet_Nonatomic_ReadWriteInExt_LateSynthesize, Get_Nonatomic_ReadWriteInExt_LateSynthesize, Set_Nonatomic_ReadWriteInExt_LateSynthesize, None_Nonatomic_ReadWriteInExt_LateSynthesize;
 | |
| 
 | |
| // no synthesize - use dynamic instead
 | |
| 
 | |
| @dynamic GetSet_NoSynthesize, Get_NoSynthesize, Set_NoSynthesize, None_NoSynthesize, GetSet_Nonatomic_NoSynthesize, Get_Nonatomic_NoSynthesize, Set_Nonatomic_NoSynthesize, None_Nonatomic_NoSynthesize;
 | |
| @dynamic GetSet_ReadOnly_NoSynthesize, Get_ReadOnly_NoSynthesize, Set_ReadOnly_NoSynthesize, None_ReadOnly_NoSynthesize, GetSet_Nonatomic_ReadOnly_NoSynthesize, Get_Nonatomic_ReadOnly_NoSynthesize, Set_Nonatomic_ReadOnly_NoSynthesize, None_Nonatomic_ReadOnly_NoSynthesize;
 | |
| @dynamic GetSet_ReadWriteInExt_NoSynthesize, Get_ReadWriteInExt_NoSynthesize, Set_ReadWriteInExt_NoSynthesize, None_ReadWriteInExt_NoSynthesize, GetSet_Nonatomic_ReadWriteInExt_NoSynthesize, Get_Nonatomic_ReadWriteInExt_NoSynthesize, Set_Nonatomic_ReadWriteInExt_NoSynthesize, None_Nonatomic_ReadWriteInExt_NoSynthesize;
 | |
| 
 | |
| @end
 | |
| 
 | |
| /*
 | |
| // the following method should cause a warning along the lines of
 | |
| // :warning: Atomic property 'x' cannot pair a synthesized setter/getter with a manually implemented setter/getter
 | |
| - (void) setX: (int) aValue
 | |
| {
 | |
|     x = aValue;
 | |
| }
 | |
| 
 | |
| // no warning 'cause this is nonatomic
 | |
| - (void) setY: (int) aValue
 | |
| {
 | |
|     y = aValue;
 | |
| }
 | |
| 
 | |
| // the following method should cause a warning along the lines of
 | |
| // :warning: Atomic property 'x' cannot pair a synthesized setter/getter with a manually implemented setter/getter
 | |
| - (int) j
 | |
| {
 | |
|     return j;
 | |
| }
 | |
| 
 | |
| // no warning 'cause this is nonatomic
 | |
| - (int) k
 | |
| {
 | |
|     return k;
 | |
| }
 | |
| @end
 | |
| */
 | |
| int main (int argc, const char * argv[]) {
 | |
|     return 0;
 | |
| }
 |