xref: /aosp_15_r20/external/clang/test/CodeGenObjC/dot-syntax-1.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm -o %t %s
2*67e74705SXin Li
3*67e74705SXin Liint printf(const char *, ...);
4*67e74705SXin Li
5*67e74705SXin Li@interface Root
6*67e74705SXin Li-(id) alloc;
7*67e74705SXin Li-(id) init;
8*67e74705SXin Li@end
9*67e74705SXin Li
10*67e74705SXin Li// Property above methods...
11*67e74705SXin Li
12*67e74705SXin Li@interface Top0 : Root
13*67e74705SXin Li@property(getter=_getX,setter=_setX:) int x;
14*67e74705SXin Li@end
15*67e74705SXin Li
16*67e74705SXin Li@interface Bot0 : Top0
17*67e74705SXin Li-(int) x;
18*67e74705SXin Li-(void) setX: (int) arg;
19*67e74705SXin Li@end
20*67e74705SXin Li
21*67e74705SXin Li@implementation Top0
22*67e74705SXin Li-(int) _getX {
23*67e74705SXin Li  printf("-[ Top0 _getX ]\n");
24*67e74705SXin Li  return 0;
25*67e74705SXin Li}
26*67e74705SXin Li-(void) _setX: (int) arg {
27*67e74705SXin Li  printf("-[ Top0 _setX: %d ]\n", arg);
28*67e74705SXin Li}
29*67e74705SXin Li@end
30*67e74705SXin Li
31*67e74705SXin Li@implementation Bot0
32*67e74705SXin Li-(int) x {
33*67e74705SXin Li  printf("-[ Bot0 _getX ]\n");
34*67e74705SXin Li  return 0;
35*67e74705SXin Li}
36*67e74705SXin Li-(void) setX: (int) arg {
37*67e74705SXin Li  printf("-[ Bot0 _setX: %d ]\n", arg);
38*67e74705SXin Li}
39*67e74705SXin Li@end
40*67e74705SXin Li
41*67e74705SXin Li// Methods above property...
42*67e74705SXin Li
43*67e74705SXin Li@interface Top1 : Root
44*67e74705SXin Li-(int) x;
45*67e74705SXin Li-(void) setX: (int) arg;
46*67e74705SXin Li@end
47*67e74705SXin Li
48*67e74705SXin Li@interface Bot1 : Top1
49*67e74705SXin Li@property(getter=_getX,setter=_setX:) int x;
50*67e74705SXin Li@end
51*67e74705SXin Li
52*67e74705SXin Li@implementation Top1
53*67e74705SXin Li-(int) x {
54*67e74705SXin Li  printf("-[ Top1 x ]\n");
55*67e74705SXin Li  return 0;
56*67e74705SXin Li}
57*67e74705SXin Li-(void) setX: (int) arg {
58*67e74705SXin Li  printf("-[ Top1 setX: %d ]\n", arg);
59*67e74705SXin Li}
60*67e74705SXin Li@end
61*67e74705SXin Li
62*67e74705SXin Li@implementation Bot1
63*67e74705SXin Li-(int) _getX {
64*67e74705SXin Li  printf("-[ Bot1 _getX ]\n");
65*67e74705SXin Li  return 0;
66*67e74705SXin Li}
67*67e74705SXin Li-(void) _setX: (int) arg {
68*67e74705SXin Li  printf("-[ Bot1 _setX: %d ]\n", arg);
69*67e74705SXin Li}
70*67e74705SXin Li@end
71*67e74705SXin Li
72*67e74705SXin Li// Mixed setter & getter (variant 1)
73*67e74705SXin Li
74*67e74705SXin Li@interface Top2 : Root
75*67e74705SXin Li-(int) x;
76*67e74705SXin Li-(void) _setX: (int) arg;
77*67e74705SXin Li@end
78*67e74705SXin Li
79*67e74705SXin Li@interface Bot2 : Top2
80*67e74705SXin Li@property(getter=_getX,setter=_setX:) int x;
81*67e74705SXin Li@end
82*67e74705SXin Li
83*67e74705SXin Li@implementation Top2
84*67e74705SXin Li-(int) x {
85*67e74705SXin Li  printf("-[ Top2 x ]\n");
86*67e74705SXin Li  return 0;
87*67e74705SXin Li}
88*67e74705SXin Li-(void) _setX: (int) arg {
89*67e74705SXin Li  printf("-[ Top2 _setX: %d ]\n", arg);
90*67e74705SXin Li}
91*67e74705SXin Li@end
92*67e74705SXin Li
93*67e74705SXin Li@implementation Bot2
94*67e74705SXin Li-(int) _getX {
95*67e74705SXin Li  printf("-[ Bot2 _getX ]\n");
96*67e74705SXin Li  return 0;
97*67e74705SXin Li}
98*67e74705SXin Li-(void) setX: (int) arg {
99*67e74705SXin Li  printf("-[ Bot2 setX: %d ]\n", arg);
100*67e74705SXin Li}
101*67e74705SXin Li@end
102*67e74705SXin Li
103*67e74705SXin Li// Mixed setter & getter (variant 2)
104*67e74705SXin Li
105*67e74705SXin Li@interface Top3 : Root
106*67e74705SXin Li-(int) _getX;
107*67e74705SXin Li-(void) setX: (int) arg;
108*67e74705SXin Li@end
109*67e74705SXin Li
110*67e74705SXin Li@interface Bot3 : Top3
111*67e74705SXin Li@property(getter=_getX,setter=_setX:) int x;
112*67e74705SXin Li@end
113*67e74705SXin Li
114*67e74705SXin Li@implementation Top3
115*67e74705SXin Li-(int) _getX {
116*67e74705SXin Li  printf("-[ Top3 _getX ]\n");
117*67e74705SXin Li  return 0;
118*67e74705SXin Li}
119*67e74705SXin Li-(void) setX: (int) arg {
120*67e74705SXin Li  printf("-[ Top3 setX: %d ]\n", arg);
121*67e74705SXin Li}
122*67e74705SXin Li@end
123*67e74705SXin Li
124*67e74705SXin Li@implementation Bot3
125*67e74705SXin Li-(int) x {
126*67e74705SXin Li  printf("-[ Bot3 x ]\n");
127*67e74705SXin Li  return 0;
128*67e74705SXin Li}
129*67e74705SXin Li-(void) _setX: (int) arg {
130*67e74705SXin Li  printf("-[ Bot3 _setX: %d ]\n", arg);
131*67e74705SXin Li}
132*67e74705SXin Li@end
133*67e74705SXin Li
134*67e74705SXin Li// Mixed setter & getter (variant 3)
135*67e74705SXin Li
136*67e74705SXin Li@interface Top4 : Root
137*67e74705SXin Li@property(getter=_getX,setter=_setX:) int x;
138*67e74705SXin Li@end
139*67e74705SXin Li
140*67e74705SXin Li@interface Bot4 : Top4
141*67e74705SXin Li-(int) _getX;
142*67e74705SXin Li-(void) setX: (int) arg;
143*67e74705SXin Li@end
144*67e74705SXin Li
145*67e74705SXin Li@implementation Top4
146*67e74705SXin Li-(int) x {
147*67e74705SXin Li  printf("-[ Top4 x ]\n");
148*67e74705SXin Li  return 0;
149*67e74705SXin Li}
150*67e74705SXin Li-(void) _setX: (int) arg {
151*67e74705SXin Li  printf("-[ Top4 _setX: %d ]\n", arg);
152*67e74705SXin Li}
153*67e74705SXin Li@end
154*67e74705SXin Li
155*67e74705SXin Li@implementation Bot4
156*67e74705SXin Li-(int) _getX {
157*67e74705SXin Li  printf("-[ Bot4 _getX ]\n");
158*67e74705SXin Li  return 0;
159*67e74705SXin Li}
160*67e74705SXin Li-(void) setX: (int) arg {
161*67e74705SXin Li  printf("-[ Bot4 setX: %d ]\n", arg);
162*67e74705SXin Li}
163*67e74705SXin Li@end
164*67e74705SXin Li
165*67e74705SXin Li// Mixed setter & getter (variant 4)
166*67e74705SXin Li
167*67e74705SXin Li@interface Top5 : Root
168*67e74705SXin Li@property(getter=_getX,setter=_setX:) int x;
169*67e74705SXin Li@end
170*67e74705SXin Li
171*67e74705SXin Li@interface Bot5 : Top5
172*67e74705SXin Li-(int) x;
173*67e74705SXin Li-(void) _setX: (int) arg;
174*67e74705SXin Li@end
175*67e74705SXin Li
176*67e74705SXin Li@implementation Top5
177*67e74705SXin Li-(int) _getX {
178*67e74705SXin Li  printf("-[ Top5 _getX ]\n");
179*67e74705SXin Li  return 0;
180*67e74705SXin Li}
181*67e74705SXin Li-(void) setX: (int) arg {
182*67e74705SXin Li  printf("-[ Top5 setX: %d ]\n", arg);
183*67e74705SXin Li}
184*67e74705SXin Li@end
185*67e74705SXin Li
186*67e74705SXin Li@implementation Bot5
187*67e74705SXin Li-(int) x {
188*67e74705SXin Li  printf("-[ Bot5 x ]\n");
189*67e74705SXin Li  return 0;
190*67e74705SXin Li}
191*67e74705SXin Li-(void) _setX: (int) arg {
192*67e74705SXin Li  printf("-[ Bot5 _setX: %d ]\n", arg);
193*67e74705SXin Li}
194*67e74705SXin Li@end
195*67e74705SXin Li
196*67e74705SXin Li// Mixed level calls (variant 1)
197*67e74705SXin Li
198*67e74705SXin Li@interface Top6 : Root
199*67e74705SXin Li-(int) x;
200*67e74705SXin Li@end
201*67e74705SXin Li
202*67e74705SXin Li@interface Bot6 : Top6
203*67e74705SXin Li-(void) setX: (int) arg;
204*67e74705SXin Li@end
205*67e74705SXin Li
206*67e74705SXin Li@implementation Top6
207*67e74705SXin Li-(int) x {
208*67e74705SXin Li  printf("-[ Top6 x ]\n");
209*67e74705SXin Li  return 0;
210*67e74705SXin Li}
211*67e74705SXin Li@end
212*67e74705SXin Li
213*67e74705SXin Li@implementation Bot6
214*67e74705SXin Li-(void) setX: (int) arg {
215*67e74705SXin Li  printf("-[ Bot5 setX: %d ]\n", arg);
216*67e74705SXin Li}
217*67e74705SXin Li@end
218*67e74705SXin Li
219*67e74705SXin Li// Mixed level calls (variant 1)
220*67e74705SXin Li
221*67e74705SXin Li@interface Top7 : Root
222*67e74705SXin Li-(void) setX: (int) arg;
223*67e74705SXin Li@end
224*67e74705SXin Li
225*67e74705SXin Li@interface Bot7 : Top7
226*67e74705SXin Li-(int) x;
227*67e74705SXin Li@end
228*67e74705SXin Li
229*67e74705SXin Li@implementation Top7
230*67e74705SXin Li-(void) setX: (int) arg {
231*67e74705SXin Li  printf("-[ Top7 setX: %d ]\n", arg);
232*67e74705SXin Li}
233*67e74705SXin Li@end
234*67e74705SXin Li
235*67e74705SXin Li@implementation Bot7
236*67e74705SXin Li-(int) x {
237*67e74705SXin Li  printf("-[ Bot7 x ]\n");
238*67e74705SXin Li  return 0;
239*67e74705SXin Li}
240*67e74705SXin Li@end
241*67e74705SXin Li
242*67e74705SXin Li//
243*67e74705SXin Li
244*67e74705SXin Li// FIXME: Two more (thats it?) interesting cases. Method access on
245*67e74705SXin Li// getter w/o setter and method access on setter w/o getter.
246*67e74705SXin Li
247*67e74705SXin Liint main() {
248*67e74705SXin Li#define test(N) { \
249*67e74705SXin Li  Bot##N *ob = [[Bot##N alloc] init]; \
250*67e74705SXin Li  int x = ob.x; \
251*67e74705SXin Li  ob.x = 10; }
252*67e74705SXin Li
253*67e74705SXin Li  test(0);
254*67e74705SXin Li  test(1);
255*67e74705SXin Li  test(2);
256*67e74705SXin Li  test(3);
257*67e74705SXin Li  test(4);
258*67e74705SXin Li  test(5);
259*67e74705SXin Li  //  test(6);
260*67e74705SXin Li  //  test(7);
261*67e74705SXin Li
262*67e74705SXin Li  return 0;
263*67e74705SXin Li}
264*67e74705SXin Li
265