|  | // 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, or both be user defined, or the property must be nonatomic}} | 
|  | @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; | 
|  | } |