brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 537d8ec Raw
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