1 #include "defines.h"
2 #include "macros.h"
3 #include "args.h"
4 
5 char
fun_test_returning_char(void)6 fun_test_returning_char (void)
7 {
8   volatile_var++;
9   return 64;
10 }
11 
12 short
fun_test_returning_short(void)13 fun_test_returning_short (void)
14 {
15   volatile_var++;
16   return 65;
17 }
18 
19 int
fun_test_returning_int(void)20 fun_test_returning_int (void)
21 {
22   volatile_var++;
23   return 66;
24 }
25 
26 long
fun_test_returning_long(void)27 fun_test_returning_long (void)
28 {
29   volatile_var++;
30   return 67;
31 }
32 
33 float
fun_test_returning_float(void)34 fun_test_returning_float (void)
35 {
36   volatile_var++;
37   return 68;
38 }
39 
40 #define def_test_returning_type(fun, type, ret, reg) \
41   { type var = WRAP_RET (fun) (); \
42     union { type r; unsigned long reg; } u; \
43     u.reg = reg; \
44   assert (ret == u.r && ret == var); }
45 
46 int
main(void)47 main (void)
48 {
49   def_test_returning_type(fun_test_returning_char, char, 64, eax);
50   def_test_returning_type(fun_test_returning_short, short, 65, eax);
51   def_test_returning_type(fun_test_returning_int, int, 66, eax);
52   def_test_returning_type(fun_test_returning_long, long, 67, eax);
53   def_test_returning_type(fun_test_returning_float, float, 68, eax);
54   return 0;
55 }
56