265 lines · plain
1// RUN: %clang_cc1 -emit-llvm -o %t %s2 3int printf(const char *, ...);4 5@interface Root6-(id) alloc;7-(id) init;8@end9 10// Property above methods...11 12@interface Top0 : Root13@property(getter=_getX,setter=_setX:) int x;14@end15 16@interface Bot0 : Top017-(int) x;18-(void) setX: (int) arg;19@end20 21@implementation Top022-(int) _getX {23 printf("-[ Top0 _getX ]\n");24 return 0;25}26-(void) _setX: (int) arg {27 printf("-[ Top0 _setX: %d ]\n", arg);28}29@end30 31@implementation Bot032-(int) x {33 printf("-[ Bot0 _getX ]\n");34 return 0;35}36-(void) setX: (int) arg {37 printf("-[ Bot0 _setX: %d ]\n", arg);38}39@end40 41// Methods above property...42 43@interface Top1 : Root44-(int) x;45-(void) setX: (int) arg;46@end47 48@interface Bot1 : Top149@property(getter=_getX,setter=_setX:) int x;50@end51 52@implementation Top153-(int) x {54 printf("-[ Top1 x ]\n");55 return 0;56}57-(void) setX: (int) arg {58 printf("-[ Top1 setX: %d ]\n", arg);59}60@end61 62@implementation Bot163-(int) _getX {64 printf("-[ Bot1 _getX ]\n");65 return 0;66}67-(void) _setX: (int) arg {68 printf("-[ Bot1 _setX: %d ]\n", arg);69}70@end71 72// Mixed setter & getter (variant 1)73 74@interface Top2 : Root75-(int) x;76-(void) _setX: (int) arg;77@end78 79@interface Bot2 : Top280@property(getter=_getX,setter=_setX:) int x;81@end82 83@implementation Top284-(int) x {85 printf("-[ Top2 x ]\n");86 return 0;87}88-(void) _setX: (int) arg {89 printf("-[ Top2 _setX: %d ]\n", arg);90}91@end92 93@implementation Bot294-(int) _getX {95 printf("-[ Bot2 _getX ]\n");96 return 0;97}98-(void) setX: (int) arg {99 printf("-[ Bot2 setX: %d ]\n", arg);100}101@end102 103// Mixed setter & getter (variant 2)104 105@interface Top3 : Root106-(int) _getX;107-(void) setX: (int) arg;108@end109 110@interface Bot3 : Top3111@property(getter=_getX,setter=_setX:) int x;112@end113 114@implementation Top3115-(int) _getX {116 printf("-[ Top3 _getX ]\n");117 return 0;118}119-(void) setX: (int) arg {120 printf("-[ Top3 setX: %d ]\n", arg);121}122@end123 124@implementation Bot3125-(int) x {126 printf("-[ Bot3 x ]\n");127 return 0;128}129-(void) _setX: (int) arg {130 printf("-[ Bot3 _setX: %d ]\n", arg);131}132@end133 134// Mixed setter & getter (variant 3)135 136@interface Top4 : Root137@property(getter=_getX,setter=_setX:) int x;138@end139 140@interface Bot4 : Top4141-(int) _getX;142-(void) setX: (int) arg;143@end144 145@implementation Top4146-(int) x {147 printf("-[ Top4 x ]\n");148 return 0;149}150-(void) _setX: (int) arg {151 printf("-[ Top4 _setX: %d ]\n", arg);152}153@end154 155@implementation Bot4156-(int) _getX {157 printf("-[ Bot4 _getX ]\n");158 return 0;159}160-(void) setX: (int) arg {161 printf("-[ Bot4 setX: %d ]\n", arg);162}163@end164 165// Mixed setter & getter (variant 4)166 167@interface Top5 : Root168@property(getter=_getX,setter=_setX:) int x;169@end170 171@interface Bot5 : Top5172-(int) x;173-(void) _setX: (int) arg;174@end175 176@implementation Top5177-(int) _getX {178 printf("-[ Top5 _getX ]\n");179 return 0;180}181-(void) setX: (int) arg {182 printf("-[ Top5 setX: %d ]\n", arg);183}184@end185 186@implementation Bot5187-(int) x {188 printf("-[ Bot5 x ]\n");189 return 0;190}191-(void) _setX: (int) arg {192 printf("-[ Bot5 _setX: %d ]\n", arg);193}194@end195 196// Mixed level calls (variant 1)197 198@interface Top6 : Root199-(int) x;200@end201 202@interface Bot6 : Top6203-(void) setX: (int) arg;204@end205 206@implementation Top6207-(int) x {208 printf("-[ Top6 x ]\n");209 return 0;210}211@end212 213@implementation Bot6214-(void) setX: (int) arg {215 printf("-[ Bot5 setX: %d ]\n", arg);216}217@end218 219// Mixed level calls (variant 1)220 221@interface Top7 : Root222-(void) setX: (int) arg;223@end224 225@interface Bot7 : Top7226-(int) x;227@end228 229@implementation Top7230-(void) setX: (int) arg {231 printf("-[ Top7 setX: %d ]\n", arg);232}233@end234 235@implementation Bot7236-(int) x {237 printf("-[ Bot7 x ]\n");238 return 0;239}240@end241 242//243 244// FIXME: Two more (thats it?) interesting cases. Method access on245// getter w/o setter and method access on setter w/o getter.246 247int main(void) {248#define test(N) { \249 Bot##N *ob = [[Bot##N alloc] init]; \250 int x = ob.x; \251 ob.x = 10; }252 253 test(0);254 test(1);255 test(2);256 test(3);257 test(4);258 test(5);259 // test(6);260 // test(7);261 262 return 0;263}264 265