1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2*67e74705SXin Li 3*67e74705SXin Li/* 4*67e74705SXin Li Conditions for warning: 5*67e74705SXin Li 1. the property is atomic 6*67e74705SXin Li 2. the current @implementation contains an @synthesize for the property 7*67e74705SXin Li 3. the current @implementation contains a hand-written setter XOR getter 8*67e74705SXin Li 4. the property is read-write 9*67e74705SXin Li 10*67e74705SXin Li Cases marked WARN should warn one the following: 11*67e74705SXin Li warning: Atomic property 'x' has a synthesized setter and a 12*67e74705SXin Li manually-implemented getter, which may break atomicity. 13*67e74705SXin Li warning: Atomic property 'x' has a synthesized getter and a 14*67e74705SXin Li manually-implemented setter, which may break atomicity. 15*67e74705SXin Li 16*67e74705SXin Li Cases not marked WARN only satisfy the indicated subset 17*67e74705SXin Li of the conditions required to warn. 18*67e74705SXin Li 19*67e74705SXin Li There should be 8 warnings. 20*67e74705SXin Li*/ 21*67e74705SXin Li 22*67e74705SXin Li@interface Foo 23*67e74705SXin Li{ 24*67e74705SXin Li /* 12 4 */ int GetSet; 25*67e74705SXin Li /* WARN */ int Get; 26*67e74705SXin Li /* WARN */ int Set; 27*67e74705SXin Li /* 12 4 */ int None; 28*67e74705SXin Li /* 2 4 */ int GetSet_Nonatomic; 29*67e74705SXin Li /* 234 */ int Get_Nonatomic; 30*67e74705SXin Li /* 234 */ int Set_Nonatomic; 31*67e74705SXin Li /* 2 4 */ int None_Nonatomic; 32*67e74705SXin Li 33*67e74705SXin Li /* 12 */ int GetSet_ReadOnly; 34*67e74705SXin Li /* 123 */ int Get_ReadOnly; 35*67e74705SXin Li /* 123 */ int Set_ReadOnly; 36*67e74705SXin Li /* 12 */ int None_ReadOnly; 37*67e74705SXin Li /* 2 */ int GetSet_Nonatomic_ReadOnly; 38*67e74705SXin Li /* 23 */ int Get_Nonatomic_ReadOnly; 39*67e74705SXin Li /* 23 */ int Set_Nonatomic_ReadOnly; 40*67e74705SXin Li /* 2 */ int None_Nonatomic_ReadOnly; 41*67e74705SXin Li 42*67e74705SXin Li /* 12 4 */ int GetSet_ReadWriteInExt; 43*67e74705SXin Li /* WARN */ int Get_ReadWriteInExt; 44*67e74705SXin Li /* WARN */ int Set_ReadWriteInExt; 45*67e74705SXin Li /* 12 4 */ int None_ReadWriteInExt; 46*67e74705SXin Li /* 2 4 */ int GetSet_Nonatomic_ReadWriteInExt; 47*67e74705SXin Li /* 234 */ int Get_Nonatomic_ReadWriteInExt; 48*67e74705SXin Li /* 234 */ int Set_Nonatomic_ReadWriteInExt; 49*67e74705SXin Li /* 2 4 */ int None_Nonatomic_ReadWriteInExt; 50*67e74705SXin Li 51*67e74705SXin Li 52*67e74705SXin Li /* 12 4 */ int GetSet_LateSynthesize; 53*67e74705SXin Li /* WARN */ int Get_LateSynthesize; 54*67e74705SXin Li /* WARN */ int Set_LateSynthesize; 55*67e74705SXin Li /* 12 4 */ int None_LateSynthesize; 56*67e74705SXin Li /* 2 4 */ int GetSet_Nonatomic_LateSynthesize; 57*67e74705SXin Li /* 234 */ int Get_Nonatomic_LateSynthesize; 58*67e74705SXin Li /* 234 */ int Set_Nonatomic_LateSynthesize; 59*67e74705SXin Li /* 2 4 */ int None_Nonatomic_LateSynthesize; 60*67e74705SXin Li 61*67e74705SXin Li /* 12 */ int GetSet_ReadOnly_LateSynthesize; 62*67e74705SXin Li /* 123 */ int Get_ReadOnly_LateSynthesize; 63*67e74705SXin Li /* 123 */ int Set_ReadOnly_LateSynthesize; 64*67e74705SXin Li /* 12 */ int None_ReadOnly_LateSynthesize; 65*67e74705SXin Li /* 2 */ int GetSet_Nonatomic_ReadOnly_LateSynthesize; 66*67e74705SXin Li /* 23 */ int Get_Nonatomic_ReadOnly_LateSynthesize; 67*67e74705SXin Li /* 23 */ int Set_Nonatomic_ReadOnly_LateSynthesize; 68*67e74705SXin Li /* 2 */ int None_Nonatomic_ReadOnly_LateSynthesize; 69*67e74705SXin Li 70*67e74705SXin Li /* 12 4 */ int GetSet_ReadWriteInExt_LateSynthesize; 71*67e74705SXin Li /* WARN */ int Get_ReadWriteInExt_LateSynthesize; 72*67e74705SXin Li /* WARN */ int Set_ReadWriteInExt_LateSynthesize; 73*67e74705SXin Li /* 12 4 */ int None_ReadWriteInExt_LateSynthesize; 74*67e74705SXin Li /* 2 4 */ int GetSet_Nonatomic_ReadWriteInExt_LateSynthesize; 75*67e74705SXin Li /* 234 */ int Get_Nonatomic_ReadWriteInExt_LateSynthesize; 76*67e74705SXin Li /* 234 */ int Set_Nonatomic_ReadWriteInExt_LateSynthesize; 77*67e74705SXin Li /* 2 4 */ int None_Nonatomic_ReadWriteInExt_LateSynthesize; 78*67e74705SXin Li 79*67e74705SXin Li 80*67e74705SXin Li /* 1 4 */ int GetSet_NoSynthesize; 81*67e74705SXin Li /* 1 34 */ int Get_NoSynthesize; 82*67e74705SXin Li /* 1 34 */ int Set_NoSynthesize; 83*67e74705SXin Li /* 1 4 */ int None_NoSynthesize; 84*67e74705SXin Li /* 4 */ int GetSet_Nonatomic_NoSynthesize; 85*67e74705SXin Li /* 34 */ int Get_Nonatomic_NoSynthesize; 86*67e74705SXin Li /* 34 */ int Set_Nonatomic_NoSynthesize; 87*67e74705SXin Li /* 4 */ int None_Nonatomic_NoSynthesize; 88*67e74705SXin Li 89*67e74705SXin Li /* 1 */ int GetSet_ReadOnly_NoSynthesize; 90*67e74705SXin Li /* 1 3 */ int Get_ReadOnly_NoSynthesize; 91*67e74705SXin Li /* 1 3 */ int Set_ReadOnly_NoSynthesize; 92*67e74705SXin Li /* 1 */ int None_ReadOnly_NoSynthesize; 93*67e74705SXin Li /* */ int GetSet_Nonatomic_ReadOnly_NoSynthesize; 94*67e74705SXin Li /* 3 */ int Get_Nonatomic_ReadOnly_NoSynthesize; 95*67e74705SXin Li /* 3 */ int Set_Nonatomic_ReadOnly_NoSynthesize; 96*67e74705SXin Li /* */ int None_Nonatomic_ReadOnly_NoSynthesize; 97*67e74705SXin Li 98*67e74705SXin Li /* 1 4 */ int GetSet_ReadWriteInExt_NoSynthesize; 99*67e74705SXin Li /* 1 34 */ int Get_ReadWriteInExt_NoSynthesize; 100*67e74705SXin Li /* 1 34 */ int Set_ReadWriteInExt_NoSynthesize; 101*67e74705SXin Li /* 1 4 */ int None_ReadWriteInExt_NoSynthesize; 102*67e74705SXin Li /* 4 */ int GetSet_Nonatomic_ReadWriteInExt_NoSynthesize; 103*67e74705SXin Li /* 34 */ int Get_Nonatomic_ReadWriteInExt_NoSynthesize; 104*67e74705SXin Li /* 34 */ int Set_Nonatomic_ReadWriteInExt_NoSynthesize; 105*67e74705SXin Li /* 4 */ int None_Nonatomic_ReadWriteInExt_NoSynthesize; 106*67e74705SXin Li} 107*67e74705SXin Li 108*67e74705SXin Li// read-write - might warn 109*67e74705SXin Li@property int GetSet; 110*67e74705SXin Li@property int Get; // expected-note {{property declared here}} \ 111*67e74705SXin Li // expected-note {{setter and getter must both be synthesized}} 112*67e74705SXin Li@property int Set; // expected-note {{property declared here}} \ 113*67e74705SXin Li // expected-note {{setter and getter must both be synthesized}} 114*67e74705SXin Li@property int None; 115*67e74705SXin Li@property(nonatomic) int GetSet_Nonatomic; 116*67e74705SXin Li@property(nonatomic) int Get_Nonatomic; 117*67e74705SXin Li@property(nonatomic) int Set_Nonatomic; 118*67e74705SXin Li@property(nonatomic) int None_Nonatomic; 119*67e74705SXin Li 120*67e74705SXin Li// read-only - must not warn 121*67e74705SXin Li@property(readonly) int GetSet_ReadOnly; 122*67e74705SXin Li@property(readonly) int Get_ReadOnly; 123*67e74705SXin Li@property(readonly) int Set_ReadOnly; 124*67e74705SXin Li@property(readonly) int None_ReadOnly; 125*67e74705SXin Li@property(nonatomic,readonly) int GetSet_Nonatomic_ReadOnly; 126*67e74705SXin Li@property(nonatomic,readonly) int Get_Nonatomic_ReadOnly; 127*67e74705SXin Li@property(nonatomic,readonly) int Set_Nonatomic_ReadOnly; 128*67e74705SXin Li@property(nonatomic,readonly) int None_Nonatomic_ReadOnly; 129*67e74705SXin Li 130*67e74705SXin Li// read-only in class, read-write in class extension - might warn 131*67e74705SXin Li@property(readonly) int GetSet_ReadWriteInExt; 132*67e74705SXin Li@property(readonly) int Get_ReadWriteInExt; 133*67e74705SXin Li@property(readonly) int Set_ReadWriteInExt; 134*67e74705SXin Li@property(readonly) int None_ReadWriteInExt; 135*67e74705SXin Li@property(nonatomic,readonly) int GetSet_Nonatomic_ReadWriteInExt; 136*67e74705SXin Li@property(nonatomic,readonly) int Get_Nonatomic_ReadWriteInExt; 137*67e74705SXin Li@property(nonatomic,readonly) int Set_Nonatomic_ReadWriteInExt; 138*67e74705SXin Li@property(nonatomic,readonly) int None_Nonatomic_ReadWriteInExt; 139*67e74705SXin Li 140*67e74705SXin Li 141*67e74705SXin Li// same as above, but @synthesize follows the hand-written methods - might warn 142*67e74705SXin Li@property int GetSet_LateSynthesize; 143*67e74705SXin Li@property int Get_LateSynthesize; // expected-note {{property declared here}} \ 144*67e74705SXin Li // expected-note {{setter and getter must both be synthesized}} 145*67e74705SXin Li@property int Set_LateSynthesize; // expected-note {{property declared here}} \ 146*67e74705SXin Li // expected-note {{setter and getter must both be synthesized}} 147*67e74705SXin Li@property int None_LateSynthesize; 148*67e74705SXin Li@property(nonatomic) int GetSet_Nonatomic_LateSynthesize; 149*67e74705SXin Li@property(nonatomic) int Get_Nonatomic_LateSynthesize; 150*67e74705SXin Li@property(nonatomic) int Set_Nonatomic_LateSynthesize; 151*67e74705SXin Li@property(nonatomic) int None_Nonatomic_LateSynthesize; 152*67e74705SXin Li 153*67e74705SXin Li@property(readonly) int GetSet_ReadOnly_LateSynthesize; 154*67e74705SXin Li@property(readonly) int Get_ReadOnly_LateSynthesize; 155*67e74705SXin Li@property(readonly) int Set_ReadOnly_LateSynthesize; 156*67e74705SXin Li@property(readonly) int None_ReadOnly_LateSynthesize; 157*67e74705SXin Li@property(nonatomic,readonly) int GetSet_Nonatomic_ReadOnly_LateSynthesize; 158*67e74705SXin Li@property(nonatomic,readonly) int Get_Nonatomic_ReadOnly_LateSynthesize; 159*67e74705SXin Li@property(nonatomic,readonly) int Set_Nonatomic_ReadOnly_LateSynthesize; 160*67e74705SXin Li@property(nonatomic,readonly) int None_Nonatomic_ReadOnly_LateSynthesize; 161*67e74705SXin Li 162*67e74705SXin Li@property(readonly) int GetSet_ReadWriteInExt_LateSynthesize; 163*67e74705SXin Li@property(readonly) int Get_ReadWriteInExt_LateSynthesize; 164*67e74705SXin Li@property(readonly) int Set_ReadWriteInExt_LateSynthesize; 165*67e74705SXin Li@property(readonly) int None_ReadWriteInExt_LateSynthesize; 166*67e74705SXin Li@property(nonatomic,readonly) int GetSet_Nonatomic_ReadWriteInExt_LateSynthesize; 167*67e74705SXin Li@property(nonatomic,readonly) int Get_Nonatomic_ReadWriteInExt_LateSynthesize; 168*67e74705SXin Li@property(nonatomic,readonly) int Set_Nonatomic_ReadWriteInExt_LateSynthesize; 169*67e74705SXin Li@property(nonatomic,readonly) int None_Nonatomic_ReadWriteInExt_LateSynthesize; 170*67e74705SXin Li 171*67e74705SXin Li 172*67e74705SXin Li// same as above, but with no @synthesize - must not warn 173*67e74705SXin Li@property int GetSet_NoSynthesize; 174*67e74705SXin Li@property int Get_NoSynthesize; 175*67e74705SXin Li@property int Set_NoSynthesize; 176*67e74705SXin Li@property int None_NoSynthesize; 177*67e74705SXin Li@property(nonatomic) int GetSet_Nonatomic_NoSynthesize; 178*67e74705SXin Li@property(nonatomic) int Get_Nonatomic_NoSynthesize; 179*67e74705SXin Li@property(nonatomic) int Set_Nonatomic_NoSynthesize; 180*67e74705SXin Li@property(nonatomic) int None_Nonatomic_NoSynthesize; 181*67e74705SXin Li 182*67e74705SXin Li@property(readonly) int GetSet_ReadOnly_NoSynthesize; 183*67e74705SXin Li@property(readonly) int Get_ReadOnly_NoSynthesize; 184*67e74705SXin Li@property(readonly) int Set_ReadOnly_NoSynthesize; 185*67e74705SXin Li@property(readonly) int None_ReadOnly_NoSynthesize; 186*67e74705SXin Li@property(nonatomic,readonly) int GetSet_Nonatomic_ReadOnly_NoSynthesize; 187*67e74705SXin Li@property(nonatomic,readonly) int Get_Nonatomic_ReadOnly_NoSynthesize; 188*67e74705SXin Li@property(nonatomic,readonly) int Set_Nonatomic_ReadOnly_NoSynthesize; 189*67e74705SXin Li@property(nonatomic,readonly) int None_Nonatomic_ReadOnly_NoSynthesize; 190*67e74705SXin Li 191*67e74705SXin Li@property(readonly) int GetSet_ReadWriteInExt_NoSynthesize; 192*67e74705SXin Li@property(readonly) int Get_ReadWriteInExt_NoSynthesize; 193*67e74705SXin Li@property(readonly) int Set_ReadWriteInExt_NoSynthesize; 194*67e74705SXin Li@property(readonly) int None_ReadWriteInExt_NoSynthesize; 195*67e74705SXin Li@property(nonatomic,readonly) int GetSet_Nonatomic_ReadWriteInExt_NoSynthesize; 196*67e74705SXin Li@property(nonatomic,readonly) int Get_Nonatomic_ReadWriteInExt_NoSynthesize; 197*67e74705SXin Li@property(nonatomic,readonly) int Set_Nonatomic_ReadWriteInExt_NoSynthesize; 198*67e74705SXin Li@property(nonatomic,readonly) int None_Nonatomic_ReadWriteInExt_NoSynthesize; 199*67e74705SXin Li 200*67e74705SXin Li@end 201*67e74705SXin Li 202*67e74705SXin Li 203*67e74705SXin Li@interface Foo () 204*67e74705SXin Li 205*67e74705SXin Li@property(readwrite) int GetSet_ReadWriteInExt; 206*67e74705SXin Li@property(readwrite) int Get_ReadWriteInExt; // expected-note {{property declared here}} \ 207*67e74705SXin Li // expected-note {{setter and getter must both be synthesized}} 208*67e74705SXin Li@property(readwrite) int Set_ReadWriteInExt; // expected-note {{property declared here}} \ 209*67e74705SXin Li // expected-note {{setter and getter must both be synthesized}} 210*67e74705SXin Li@property(readwrite) int None_ReadWriteInExt; 211*67e74705SXin Li@property(nonatomic,readwrite) int GetSet_Nonatomic_ReadWriteInExt; 212*67e74705SXin Li@property(nonatomic,readwrite) int Get_Nonatomic_ReadWriteInExt; 213*67e74705SXin Li@property(nonatomic,readwrite) int Set_Nonatomic_ReadWriteInExt; 214*67e74705SXin Li@property(nonatomic,readwrite) int None_Nonatomic_ReadWriteInExt; 215*67e74705SXin Li 216*67e74705SXin Li@property(readwrite) int GetSet_ReadWriteInExt_LateSynthesize; 217*67e74705SXin Li@property(readwrite) int Get_ReadWriteInExt_LateSynthesize; // expected-note {{property declared here}} \ 218*67e74705SXin Li // expected-note {{setter and getter must both be synthesized}} 219*67e74705SXin Li@property(readwrite) int Set_ReadWriteInExt_LateSynthesize; // expected-note {{property declared here}} \ 220*67e74705SXin Li // expected-note {{setter and getter must both be synthesized}} 221*67e74705SXin Li@property(readwrite) int None_ReadWriteInExt_LateSynthesize; 222*67e74705SXin Li@property(nonatomic,readwrite) int GetSet_Nonatomic_ReadWriteInExt_LateSynthesize; 223*67e74705SXin Li@property(nonatomic,readwrite) int Get_Nonatomic_ReadWriteInExt_LateSynthesize; 224*67e74705SXin Li@property(nonatomic,readwrite) int Set_Nonatomic_ReadWriteInExt_LateSynthesize; 225*67e74705SXin Li@property(nonatomic,readwrite) int None_Nonatomic_ReadWriteInExt_LateSynthesize; 226*67e74705SXin Li 227*67e74705SXin Li@property(readwrite) int GetSet_ReadWriteInExt_NoSynthesize; 228*67e74705SXin Li@property(readwrite) int Get_ReadWriteInExt_NoSynthesize; 229*67e74705SXin Li@property(readwrite) int Set_ReadWriteInExt_NoSynthesize; 230*67e74705SXin Li@property(readwrite) int None_ReadWriteInExt_NoSynthesize; 231*67e74705SXin Li@property(nonatomic,readwrite) int GetSet_Nonatomic_ReadWriteInExt_NoSynthesize; 232*67e74705SXin Li@property(nonatomic,readwrite) int Get_Nonatomic_ReadWriteInExt_NoSynthesize; 233*67e74705SXin Li@property(nonatomic,readwrite) int Set_Nonatomic_ReadWriteInExt_NoSynthesize; 234*67e74705SXin Li@property(nonatomic,readwrite) int None_Nonatomic_ReadWriteInExt_NoSynthesize; 235*67e74705SXin Li 236*67e74705SXin Li@end 237*67e74705SXin Li 238*67e74705SXin Li@implementation Foo 239*67e74705SXin Li 240*67e74705SXin Li@synthesize GetSet, Get, Set, None, GetSet_Nonatomic, Get_Nonatomic, Set_Nonatomic, None_Nonatomic; 241*67e74705SXin Li@synthesize GetSet_ReadOnly, Get_ReadOnly, Set_ReadOnly, None_ReadOnly, GetSet_Nonatomic_ReadOnly, Get_Nonatomic_ReadOnly, Set_Nonatomic_ReadOnly, None_Nonatomic_ReadOnly; 242*67e74705SXin Li@synthesize GetSet_ReadWriteInExt, Get_ReadWriteInExt, Set_ReadWriteInExt, None_ReadWriteInExt, GetSet_Nonatomic_ReadWriteInExt, Get_Nonatomic_ReadWriteInExt, Set_Nonatomic_ReadWriteInExt, None_Nonatomic_ReadWriteInExt; 243*67e74705SXin Li 244*67e74705SXin Li#define GET(x) \ 245*67e74705SXin Li -(int) x { return self->x; } 246*67e74705SXin Li#define SET(x) \ 247*67e74705SXin Li -(void) set##x:(int)value { self->x = value; } 248*67e74705SXin Li 249*67e74705SXin LiGET(GetSet) 250*67e74705SXin LiSET(GetSet) 251*67e74705SXin LiGET(Get) // expected-warning {{writable atomic property 'Get' cannot pair a synthesized setter with a user defined getter}} 252*67e74705SXin LiSET(Set) // expected-warning {{writable atomic property 'Set' cannot pair a synthesized getter with a user defined setter}} 253*67e74705SXin LiGET(GetSet_Nonatomic) 254*67e74705SXin LiSET(GetSet_Nonatomic) 255*67e74705SXin LiGET(Get_Nonatomic) 256*67e74705SXin LiSET(Set_Nonatomic) 257*67e74705SXin Li 258*67e74705SXin LiGET(GetSet_ReadOnly) 259*67e74705SXin LiSET(GetSet_ReadOnly) 260*67e74705SXin LiGET(Get_ReadOnly) 261*67e74705SXin LiSET(Set_ReadOnly) 262*67e74705SXin LiGET(GetSet_Nonatomic_ReadOnly) 263*67e74705SXin LiSET(GetSet_Nonatomic_ReadOnly) 264*67e74705SXin LiGET(Get_Nonatomic_ReadOnly) 265*67e74705SXin LiSET(Set_Nonatomic_ReadOnly) 266*67e74705SXin Li 267*67e74705SXin LiGET(GetSet_ReadWriteInExt) 268*67e74705SXin LiSET(GetSet_ReadWriteInExt) 269*67e74705SXin LiGET(Get_ReadWriteInExt) // expected-warning {{writable atomic property 'Get_ReadWriteInExt' cannot pair a synthesized setter with a user defined getter}} 270*67e74705SXin LiSET(Set_ReadWriteInExt) // expected-warning {{writable atomic property 'Set_ReadWriteInExt' cannot pair a synthesized getter with a user defined setter}} 271*67e74705SXin LiGET(GetSet_Nonatomic_ReadWriteInExt) 272*67e74705SXin LiSET(GetSet_Nonatomic_ReadWriteInExt) 273*67e74705SXin LiGET(Get_Nonatomic_ReadWriteInExt) 274*67e74705SXin LiSET(Set_Nonatomic_ReadWriteInExt) 275*67e74705SXin Li 276*67e74705SXin Li 277*67e74705SXin LiGET(GetSet_LateSynthesize) 278*67e74705SXin LiSET(GetSet_LateSynthesize) 279*67e74705SXin LiGET(Get_LateSynthesize) // expected-warning {{writable atomic property 'Get_LateSynthesize' cannot pair a synthesized setter with a user defined getter}} 280*67e74705SXin LiSET(Set_LateSynthesize) // expected-warning {{writable atomic property 'Set_LateSynthesize' cannot pair a synthesized getter with a user defined setter}} 281*67e74705SXin LiGET(GetSet_Nonatomic_LateSynthesize) 282*67e74705SXin LiSET(GetSet_Nonatomic_LateSynthesize) 283*67e74705SXin LiGET(Get_Nonatomic_LateSynthesize) 284*67e74705SXin LiSET(Set_Nonatomic_LateSynthesize) 285*67e74705SXin Li 286*67e74705SXin LiGET(GetSet_ReadOnly_LateSynthesize) 287*67e74705SXin LiSET(GetSet_ReadOnly_LateSynthesize) 288*67e74705SXin LiGET(Get_ReadOnly_LateSynthesize) 289*67e74705SXin LiSET(Set_ReadOnly_LateSynthesize) 290*67e74705SXin LiGET(GetSet_Nonatomic_ReadOnly_LateSynthesize) 291*67e74705SXin LiSET(GetSet_Nonatomic_ReadOnly_LateSynthesize) 292*67e74705SXin LiGET(Get_Nonatomic_ReadOnly_LateSynthesize) 293*67e74705SXin LiSET(Set_Nonatomic_ReadOnly_LateSynthesize) 294*67e74705SXin Li 295*67e74705SXin LiGET(GetSet_ReadWriteInExt_LateSynthesize) 296*67e74705SXin LiSET(GetSet_ReadWriteInExt_LateSynthesize) 297*67e74705SXin LiGET(Get_ReadWriteInExt_LateSynthesize) // expected-warning {{writable atomic property 'Get_ReadWriteInExt_LateSynthesize' cannot pair a synthesized setter with a user defined getter}} 298*67e74705SXin LiSET(Set_ReadWriteInExt_LateSynthesize) // expected-warning {{writable atomic property 'Set_ReadWriteInExt_LateSynthesize' cannot pair a synthesized getter with a user defined setter}} 299*67e74705SXin LiGET(GetSet_Nonatomic_ReadWriteInExt_LateSynthesize) 300*67e74705SXin LiSET(GetSet_Nonatomic_ReadWriteInExt_LateSynthesize) 301*67e74705SXin LiGET(Get_Nonatomic_ReadWriteInExt_LateSynthesize) 302*67e74705SXin LiSET(Set_Nonatomic_ReadWriteInExt_LateSynthesize) 303*67e74705SXin Li 304*67e74705SXin Li 305*67e74705SXin LiGET(GetSet_NoSynthesize) 306*67e74705SXin LiSET(GetSet_NoSynthesize) 307*67e74705SXin LiGET(Get_NoSynthesize) 308*67e74705SXin LiSET(Set_NoSynthesize) 309*67e74705SXin LiGET(GetSet_Nonatomic_NoSynthesize) 310*67e74705SXin LiSET(GetSet_Nonatomic_NoSynthesize) 311*67e74705SXin LiGET(Get_Nonatomic_NoSynthesize) 312*67e74705SXin LiSET(Set_Nonatomic_NoSynthesize) 313*67e74705SXin Li 314*67e74705SXin LiGET(GetSet_ReadOnly_NoSynthesize) 315*67e74705SXin LiSET(GetSet_ReadOnly_NoSynthesize) 316*67e74705SXin LiGET(Get_ReadOnly_NoSynthesize) 317*67e74705SXin LiSET(Set_ReadOnly_NoSynthesize) 318*67e74705SXin LiGET(GetSet_Nonatomic_ReadOnly_NoSynthesize) 319*67e74705SXin LiSET(GetSet_Nonatomic_ReadOnly_NoSynthesize) 320*67e74705SXin LiGET(Get_Nonatomic_ReadOnly_NoSynthesize) 321*67e74705SXin LiSET(Set_Nonatomic_ReadOnly_NoSynthesize) 322*67e74705SXin Li 323*67e74705SXin LiGET(GetSet_ReadWriteInExt_NoSynthesize) 324*67e74705SXin LiSET(GetSet_ReadWriteInExt_NoSynthesize) 325*67e74705SXin LiGET(Get_ReadWriteInExt_NoSynthesize) 326*67e74705SXin LiSET(Set_ReadWriteInExt_NoSynthesize) 327*67e74705SXin LiGET(GetSet_Nonatomic_ReadWriteInExt_NoSynthesize) 328*67e74705SXin LiSET(GetSet_Nonatomic_ReadWriteInExt_NoSynthesize) 329*67e74705SXin LiGET(Get_Nonatomic_ReadWriteInExt_NoSynthesize) 330*67e74705SXin LiSET(Set_Nonatomic_ReadWriteInExt_NoSynthesize) 331*67e74705SXin Li 332*67e74705SXin Li 333*67e74705SXin Li// late synthesize - follows getter/setter implementations 334*67e74705SXin Li 335*67e74705SXin Li@synthesize GetSet_LateSynthesize, Get_LateSynthesize, Set_LateSynthesize, None_LateSynthesize, GetSet_Nonatomic_LateSynthesize, Get_Nonatomic_LateSynthesize, Set_Nonatomic_LateSynthesize, None_Nonatomic_LateSynthesize; 336*67e74705SXin Li@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; 337*67e74705SXin Li@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; 338*67e74705SXin Li 339*67e74705SXin Li// no synthesize - use dynamic instead 340*67e74705SXin Li 341*67e74705SXin Li@dynamic GetSet_NoSynthesize, Get_NoSynthesize, Set_NoSynthesize, None_NoSynthesize, GetSet_Nonatomic_NoSynthesize, Get_Nonatomic_NoSynthesize, Set_Nonatomic_NoSynthesize, None_Nonatomic_NoSynthesize; 342*67e74705SXin Li@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; 343*67e74705SXin Li@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; 344*67e74705SXin Li 345*67e74705SXin Li@end 346*67e74705SXin Li 347*67e74705SXin Li/* 348*67e74705SXin Li// the following method should cause a warning along the lines of 349*67e74705SXin Li// :warning: Atomic property 'x' cannot pair a synthesized setter/getter with a manually implemented setter/getter 350*67e74705SXin Li- (void) setX: (int) aValue 351*67e74705SXin Li{ 352*67e74705SXin Li x = aValue; 353*67e74705SXin Li} 354*67e74705SXin Li 355*67e74705SXin Li// no warning 'cause this is nonatomic 356*67e74705SXin Li- (void) setY: (int) aValue 357*67e74705SXin Li{ 358*67e74705SXin Li y = aValue; 359*67e74705SXin Li} 360*67e74705SXin Li 361*67e74705SXin Li// the following method should cause a warning along the lines of 362*67e74705SXin Li// :warning: Atomic property 'x' cannot pair a synthesized setter/getter with a manually implemented setter/getter 363*67e74705SXin Li- (int) j 364*67e74705SXin Li{ 365*67e74705SXin Li return j; 366*67e74705SXin Li} 367*67e74705SXin Li 368*67e74705SXin Li// no warning 'cause this is nonatomic 369*67e74705SXin Li- (int) k 370*67e74705SXin Li{ 371*67e74705SXin Li return k; 372*67e74705SXin Li} 373*67e74705SXin Li@end 374*67e74705SXin Li*/ 375*67e74705SXin Liint main (int argc, const char * argv[]) { 376*67e74705SXin Li return 0; 377*67e74705SXin Li} 378