]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - packages/Python/lldbsuite/test/functionalities/return-value/call-func.c
Vendor import of lldb trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / packages / Python / lldbsuite / test / functionalities / return-value / call-func.c
1 // Some convenient things to return:
2 static char *g_first_pointer = "I am the first";
3 static char *g_second_pointer = "I am the second";
4
5 // First we have some simple functions that return standard types, ints, floats and doubles.
6 // We have a function calling a function in a few cases to test that if you stop in the
7 // inner function then do "up/fin" you get the return value from the outer-most frame.
8
9 int 
10 inner_sint (int value)
11 {
12   return value;
13 }
14
15 int
16 outer_sint (int value)
17 {
18   int outer_value = 2 * inner_sint (value);
19   return outer_value;
20 }
21
22 float
23 inner_float (float value)
24 {
25   return value;
26 }
27
28 float 
29 outer_float (float value)
30 {
31   float outer_value = 2 * inner_float(value);
32   return outer_value;
33 }
34
35 double 
36 return_double (double value)
37 {
38   return value;
39 }
40
41 long double 
42 return_long_double (long double value)
43 {
44   return value;
45 }
46
47 char *
48 return_pointer (char *value)
49 {
50   return value;
51 }
52
53 struct one_int
54 {
55   int one_field;
56 };
57
58 struct one_int
59 return_one_int (struct one_int value)
60 {
61   return value;
62 }
63
64 struct two_int
65 {
66   int first_field;
67   int second_field;
68 };
69
70 struct two_int
71 return_two_int (struct two_int value)
72 {
73   return value;
74 }
75
76 struct three_int
77 {
78   int first_field;
79   int second_field;
80   int third_field;
81 };
82
83 struct three_int
84 return_three_int (struct three_int value)
85 {
86   return value;
87 }
88
89 struct four_int
90 {
91   int first_field;
92   int second_field;
93   int third_field;
94   int fourth_field;
95 };
96
97 struct four_int
98 return_four_int (struct four_int value)
99 {
100   return value;
101 }
102
103 struct five_int
104 {
105   int first_field;
106   int second_field;
107   int third_field;
108   int fourth_field;
109   int fifth_field;
110 };
111
112 struct five_int
113 return_five_int (struct five_int value)
114 {
115   return value;
116 }
117
118 struct one_int_one_double
119 {
120   int first_field;
121   double second_field;
122 };
123
124 struct one_int_one_double
125 return_one_int_one_double (struct one_int_one_double value)
126 {
127   return value;
128 }
129
130 struct one_int_one_double_one_int
131 {
132   int one_field;
133   double second_field;
134   int third_field;
135 };
136
137 struct one_int_one_double_one_int
138 return_one_int_one_double_one_int (struct one_int_one_double_one_int value)
139 {
140   return value;
141 }
142
143 struct one_short_one_double_one_short
144 {
145   int one_field;
146   double second_field;
147   int third_field;
148 };
149
150 struct one_short_one_double_one_short
151 return_one_short_one_double_one_short (struct one_short_one_double_one_short value)
152 {
153   return value;
154 }
155
156 struct three_short_one_float
157 {
158   short one_field;
159   short second_field;
160   short third_field;
161   float fourth_field;
162 };
163
164 struct three_short_one_float
165 return_three_short_one_float (struct three_short_one_float value)
166 {
167   return value;
168 }
169
170 struct one_int_one_float_one_int
171 {
172   int one_field;
173   float second_field;
174   int third_field;
175 };
176
177 struct one_int_one_float_one_int
178 return_one_int_one_float_one_int (struct one_int_one_float_one_int value)
179 {
180   return value;
181 }
182
183 struct one_float_one_int_one_float
184 {
185   float one_field;
186   int second_field;
187   float third_field;
188 };
189
190 struct one_float_one_int_one_float
191 return_one_float_one_int_one_float (struct one_float_one_int_one_float value)
192 {
193   return value;
194 }
195
196 struct one_double_two_float
197 {
198   double one_field;
199   float second_field;
200   float third_field;
201 };
202
203 struct one_double_two_float
204 return_one_double_two_float (struct one_double_two_float value)
205 {
206   return value;
207 }
208
209 struct two_double
210 {
211   double first_field;
212   double second_field;
213 };
214
215 struct two_double
216 return_two_double (struct two_double value)
217 {
218   return value;
219 }
220
221 struct two_float
222 {
223   float first_field;
224   float second_field;
225 };
226
227 struct two_float
228 return_two_float (struct two_float value)
229 {
230   return value;
231 }
232
233 struct one_int_one_double_packed
234 {
235   int first_field;
236   double second_field;
237 } __attribute__((__packed__));
238
239 struct one_int_one_double_packed
240 return_one_int_one_double_packed (struct one_int_one_double_packed value)
241 {
242   return value;
243 }
244
245 struct one_int_one_long
246 {
247   int first_field;
248   long second_field;
249 };
250
251 struct one_int_one_long
252 return_one_int_one_long (struct one_int_one_long value)
253 {
254   return value;
255 }
256
257 struct one_pointer
258 {
259   char *first_field;
260 };
261
262 struct one_pointer
263 return_one_pointer (struct one_pointer value)
264 {
265   return value;
266 }
267
268 struct two_pointer
269 {
270   char *first_field;
271   char *second_field;
272 };
273
274 struct two_pointer
275 return_two_pointer (struct two_pointer value)
276 {
277   return value;
278 }
279
280 struct one_float_one_pointer
281 {
282   float first_field;
283   char *second_field;
284 };
285
286 struct one_float_one_pointer
287 return_one_float_one_pointer (struct one_float_one_pointer value)
288 {
289   return value;
290 }
291
292 struct one_int_one_pointer
293 {
294   int first_field;
295   char *second_field;
296 };
297
298 struct one_int_one_pointer
299 return_one_int_one_pointer (struct one_int_one_pointer value)
300 {
301   return value;
302 }
303
304 typedef float vector_size_float32_8 __attribute__((__vector_size__(8)));
305 typedef float vector_size_float32_16 __attribute__((__vector_size__(16)));
306 typedef float vector_size_float32_32 __attribute__((__vector_size__(32)));
307
308 typedef float ext_vector_size_float32_2 __attribute__((ext_vector_type(2)));
309 typedef float ext_vector_size_float32_4 __attribute__((ext_vector_type(4)));
310 typedef float ext_vector_size_float32_8 __attribute__((ext_vector_type(8)));
311
312 vector_size_float32_8
313 return_vector_size_float32_8 (vector_size_float32_8 value)
314 {
315     return value;
316 }
317
318 vector_size_float32_16
319 return_vector_size_float32_16 (vector_size_float32_16 value)
320 {
321     return value;
322 }
323
324 vector_size_float32_32
325 return_vector_size_float32_32 (vector_size_float32_32 value)
326 {
327     return value;
328 }
329
330 ext_vector_size_float32_2
331 return_ext_vector_size_float32_2 (ext_vector_size_float32_2 value)
332 {
333     return value;
334 }
335
336 ext_vector_size_float32_4
337 return_ext_vector_size_float32_4 (ext_vector_size_float32_4 value)
338 {
339     return value;
340 }
341
342 ext_vector_size_float32_8
343 return_ext_vector_size_float32_8 (ext_vector_size_float32_8 value)
344 {
345     return value;
346 }
347
348 int 
349 main ()
350 {
351   int first_int = 123456;
352   int second_int = 234567;
353
354   outer_sint (first_int);
355   outer_sint (second_int);
356
357   float first_float_value = 12.34;
358   float second_float_value = 23.45;
359
360   outer_float (first_float_value);
361   outer_float (second_float_value);
362
363   double double_value = -23.45;
364
365   return_double (double_value);
366
367   return_pointer(g_first_pointer);
368
369   long double long_double_value = -3456789.987654321;
370
371   return_long_double (long_double_value);
372
373   // Okay, now the structures:
374   return_one_int ((struct one_int) {10});
375   return_two_int ((struct two_int) {10, 20});
376   return_three_int ((struct three_int) {10, 20, 30});
377   return_four_int ((struct four_int) {10, 20, 30, 40});
378   return_five_int ((struct five_int) {10, 20, 30, 40, 50});
379
380   return_two_double ((struct two_double) {10.0, 20.0});
381   return_one_double_two_float ((struct one_double_two_float) {10.0, 20.0, 30.0});
382   return_one_int_one_float_one_int ((struct one_int_one_float_one_int) {10, 20.0, 30});
383
384   return_one_pointer ((struct one_pointer) {g_first_pointer});
385   return_two_pointer ((struct two_pointer) {g_first_pointer, g_second_pointer});
386   return_one_float_one_pointer ((struct one_float_one_pointer) {10.0, g_first_pointer});
387   return_one_int_one_pointer ((struct one_int_one_pointer) {10, g_first_pointer});
388   return_three_short_one_float ((struct three_short_one_float) {10, 20, 30, 40.0});
389
390   return_one_int_one_double ((struct one_int_one_double) {10, 20.0});
391   return_one_int_one_double_one_int ((struct one_int_one_double_one_int) {10, 20.0, 30});
392   return_one_short_one_double_one_short ((struct one_short_one_double_one_short) {10, 20.0, 30});
393   return_one_float_one_int_one_float ((struct one_float_one_int_one_float) {10.0, 20, 30.0});
394   return_two_float ((struct two_float) { 10.0, 20.0});
395   return_one_int_one_double_packed ((struct one_int_one_double_packed) {10, 20.0});
396   return_one_int_one_long ((struct one_int_one_long) {10, 20});
397
398   return_vector_size_float32_8 (( vector_size_float32_8 ){1.5, 2.25});
399   return_vector_size_float32_16 (( vector_size_float32_16 ){1.5, 2.25, 4.125, 8.0625});
400   return_vector_size_float32_32 (( vector_size_float32_32 ){1.5, 2.25, 4.125, 8.0625, 7.89, 8.52, 6.31, 9.12});
401
402   return_ext_vector_size_float32_2 ((ext_vector_size_float32_2){ 16.5, 32.25});
403   return_ext_vector_size_float32_4 ((ext_vector_size_float32_4){ 16.5, 32.25, 64.125, 128.0625});
404   return_ext_vector_size_float32_8 ((ext_vector_size_float32_8){ 16.5, 32.25, 64.125, 128.0625, 1.59, 3.57, 8.63, 9.12 });
405
406   return 0; 
407 }