blob: 417bcb4b9dfe1d953ed5b399a5fbfbfc8e67ea90 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -emit-llvm -o %t %s
Daniel Dunbarb21d6af2008-09-04 04:36:23 +00002
Daniel Dunbar23afaad2009-11-17 08:57:36 +00003int printf(const char *, ...);
Daniel Dunbarb21d6af2008-09-04 04:36:23 +00004
5@interface Root
6-(id) alloc;
7-(id) init;
8@end
9
10// Property above methods...
11
12@interface Top0 : Root
13@property(getter=_getX,setter=_setX:) int x;
14@end
15
16@interface Bot0 : Top0
17-(int) x;
18-(void) setX: (int) arg;
19@end
20
21@implementation Top0
22-(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@end
30
31@implementation Bot0
32-(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@end
40
41// Methods above property...
42
43@interface Top1 : Root
44-(int) x;
45-(void) setX: (int) arg;
46@end
47
48@interface Bot1 : Top1
49@property(getter=_getX,setter=_setX:) int x;
50@end
51
52@implementation Top1
53-(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@end
61
62@implementation Bot1
63-(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@end
71
72// Mixed setter & getter (variant 1)
73
74@interface Top2 : Root
75-(int) x;
76-(void) _setX: (int) arg;
77@end
78
79@interface Bot2 : Top2
80@property(getter=_getX,setter=_setX:) int x;
81@end
82
83@implementation Top2
84-(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@end
92
93@implementation Bot2
94-(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@end
102
103// Mixed setter & getter (variant 2)
104
105@interface Top3 : Root
106-(int) _getX;
107-(void) setX: (int) arg;
108@end
109
110@interface Bot3 : Top3
111@property(getter=_getX,setter=_setX:) int x;
112@end
113
114@implementation Top3
115-(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@end
123
124@implementation Bot3
125-(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@end
133
134// Mixed setter & getter (variant 3)
135
136@interface Top4 : Root
137@property(getter=_getX,setter=_setX:) int x;
138@end
139
140@interface Bot4 : Top4
141-(int) _getX;
142-(void) setX: (int) arg;
143@end
144
145@implementation Top4
146-(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@end
154
155@implementation Bot4
156-(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@end
164
165// Mixed setter & getter (variant 4)
166
167@interface Top5 : Root
168@property(getter=_getX,setter=_setX:) int x;
169@end
170
171@interface Bot5 : Top5
172-(int) x;
173-(void) _setX: (int) arg;
174@end
175
176@implementation Top5
177-(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@end
185
186@implementation Bot5
187-(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@end
195
196// Mixed level calls (variant 1)
197
198@interface Top6 : Root
199-(int) x;
200@end
201
202@interface Bot6 : Top6
203-(void) setX: (int) arg;
204@end
205
206@implementation Top6
207-(int) x {
208 printf("-[ Top6 x ]\n");
209 return 0;
210}
211@end
212
213@implementation Bot6
214-(void) setX: (int) arg {
215 printf("-[ Bot5 setX: %d ]\n", arg);
216}
217@end
218
219// Mixed level calls (variant 1)
220
221@interface Top7 : Root
222-(void) setX: (int) arg;
223@end
224
225@interface Bot7 : Top7
226-(int) x;
227@end
228
229@implementation Top7
230-(void) setX: (int) arg {
231 printf("-[ Top7 setX: %d ]\n", arg);
232}
233@end
234
235@implementation Bot7
236-(int) x {
237 printf("-[ Bot7 x ]\n");
238 return 0;
239}
240@end
241
242//
243
244// FIXME: Two more (thats it?) interesting cases. Method access on
245// getter w/o setter and method access on setter w/o getter.
246
247int main() {
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