Fix the clang-wpa example.
[clang.git] / test / CodeGenObjC / dot-syntax-1.m
blob417bcb4b9dfe1d953ed5b399a5fbfbfc8e67ea90
1 // RUN: %clang_cc1 -emit-llvm -o %t %s
3 int printf(const char *, ...);
5 @interface Root
6 -(id) alloc;
7 -(id) init;
8 @end
10 // Property above methods...
12 @interface Top0 : Root
13 @property(getter=_getX,setter=_setX:) int x;
14 @end
16 @interface Bot0 : Top0
17 -(int) x;
18 -(void) setX: (int) arg;
19 @end
21 @implementation Top0
22 -(int) _getX {
23   printf("-[ Top0 _getX ]\n");
24   return 0;
26 -(void) _setX: (int) arg {
27   printf("-[ Top0 _setX: %d ]\n", arg);
29 @end
31 @implementation Bot0
32 -(int) x {
33   printf("-[ Bot0 _getX ]\n");
34   return 0;
36 -(void) setX: (int) arg {
37   printf("-[ Bot0 _setX: %d ]\n", arg);
39 @end
41 // Methods above property...
43 @interface Top1 : Root
44 -(int) x;
45 -(void) setX: (int) arg;
46 @end
48 @interface Bot1 : Top1
49 @property(getter=_getX,setter=_setX:) int x;
50 @end
52 @implementation Top1
53 -(int) x {
54   printf("-[ Top1 x ]\n");
55   return 0;
57 -(void) setX: (int) arg {
58   printf("-[ Top1 setX: %d ]\n", arg);
60 @end
62 @implementation Bot1
63 -(int) _getX {
64   printf("-[ Bot1 _getX ]\n");
65   return 0;
67 -(void) _setX: (int) arg {
68   printf("-[ Bot1 _setX: %d ]\n", arg);
70 @end
72 // Mixed setter & getter (variant 1)
74 @interface Top2 : Root
75 -(int) x;
76 -(void) _setX: (int) arg;
77 @end
79 @interface Bot2 : Top2
80 @property(getter=_getX,setter=_setX:) int x;
81 @end
83 @implementation Top2
84 -(int) x {
85   printf("-[ Top2 x ]\n");
86   return 0;
88 -(void) _setX: (int) arg {
89   printf("-[ Top2 _setX: %d ]\n", arg);
91 @end
93 @implementation Bot2
94 -(int) _getX {
95   printf("-[ Bot2 _getX ]\n");
96   return 0;
98 -(void) setX: (int) arg {
99   printf("-[ Bot2 setX: %d ]\n", arg);
101 @end
103 // Mixed setter & getter (variant 2)
105 @interface Top3 : Root
106 -(int) _getX;
107 -(void) setX: (int) arg;
108 @end
110 @interface Bot3 : Top3
111 @property(getter=_getX,setter=_setX:) int x;
112 @end
114 @implementation Top3
115 -(int) _getX {
116   printf("-[ Top3 _getX ]\n");
117   return 0;
119 -(void) setX: (int) arg {
120   printf("-[ Top3 setX: %d ]\n", arg);
122 @end
124 @implementation Bot3
125 -(int) x {
126   printf("-[ Bot3 x ]\n");
127   return 0;
129 -(void) _setX: (int) arg {
130   printf("-[ Bot3 _setX: %d ]\n", arg);
132 @end
134 // Mixed setter & getter (variant 3)
136 @interface Top4 : Root
137 @property(getter=_getX,setter=_setX:) int x;
138 @end
140 @interface Bot4 : Top4
141 -(int) _getX;
142 -(void) setX: (int) arg;
143 @end
145 @implementation Top4
146 -(int) x {
147   printf("-[ Top4 x ]\n");
148   return 0;
150 -(void) _setX: (int) arg {
151   printf("-[ Top4 _setX: %d ]\n", arg);
153 @end
155 @implementation Bot4
156 -(int) _getX {
157   printf("-[ Bot4 _getX ]\n");
158   return 0;
160 -(void) setX: (int) arg {
161   printf("-[ Bot4 setX: %d ]\n", arg);
163 @end
165 // Mixed setter & getter (variant 4)
167 @interface Top5 : Root
168 @property(getter=_getX,setter=_setX:) int x;
169 @end
171 @interface Bot5 : Top5
172 -(int) x;
173 -(void) _setX: (int) arg;
174 @end
176 @implementation Top5
177 -(int) _getX {
178   printf("-[ Top5 _getX ]\n");
179   return 0;
181 -(void) setX: (int) arg {
182   printf("-[ Top5 setX: %d ]\n", arg);
184 @end
186 @implementation Bot5
187 -(int) x {
188   printf("-[ Bot5 x ]\n");
189   return 0;
191 -(void) _setX: (int) arg {
192   printf("-[ Bot5 _setX: %d ]\n", arg);
194 @end
196 // Mixed level calls (variant 1)
198 @interface Top6 : Root
199 -(int) x;
200 @end
202 @interface Bot6 : Top6
203 -(void) setX: (int) arg;
204 @end
206 @implementation Top6
207 -(int) x {
208   printf("-[ Top6 x ]\n");
209   return 0;
211 @end
213 @implementation Bot6
214 -(void) setX: (int) arg {
215   printf("-[ Bot5 setX: %d ]\n", arg);
217 @end
219 // Mixed level calls (variant 1)
221 @interface Top7 : Root
222 -(void) setX: (int) arg;
223 @end
225 @interface Bot7 : Top7
226 -(int) x;
227 @end
229 @implementation Top7
230 -(void) setX: (int) arg {
231   printf("-[ Top7 setX: %d ]\n", arg);
233 @end
235 @implementation Bot7
236 -(int) x {
237   printf("-[ Bot7 x ]\n");
238   return 0;
240 @end
244 // FIXME: Two more (thats it?) interesting cases. Method access on
245 // getter w/o setter and method access on setter w/o getter.
247 int main() {
248 #define test(N) { \
249   Bot##N *ob = [[Bot##N alloc] init]; \
250   int x = ob.x; \
251   ob.x = 10; }
253   test(0);
254   test(1);
255   test(2);
256   test(3);
257   test(4);
258   test(5);
259   //  test(6);
260   //  test(7);
262   return 0;