OSDN Git Service

e985f91e444045061212643c9c53371659ca87e0
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / compat / struct-return-3_x.c
1 #include "compat-common.h"
2
3 #ifdef SKIP_VA
4 const int test_va = 0;
5 #else
6 const int test_va = 1;
7 #endif
8
9 #define T(TYPE)                                                 \
10 TYPE g01##TYPE, g02##TYPE, g03##TYPE, g04##TYPE;                \
11 TYPE g05##TYPE, g06##TYPE, g07##TYPE, g08##TYPE;                \
12 TYPE g09##TYPE, g10##TYPE, g11##TYPE, g12##TYPE;                \
13 TYPE g13##TYPE, g14##TYPE, g15##TYPE, g16##TYPE;                \
14                                                                 \
15 extern void init##TYPE (TYPE *p, int i);                        \
16 extern void checkg##TYPE (void);                                \
17 extern TYPE test0##TYPE (void);                                 \
18 extern TYPE test1##TYPE (TYPE);                                 \
19 extern TYPE testva##TYPE (int n, ...);                          \
20                                                                 \
21 void                                                            \
22 testit##TYPE (void)                                             \
23 {                                                               \
24   TYPE rslt;                                                    \
25   DEBUG_FPUTS (#TYPE);                                          \
26   DEBUG_FPUTS (" init: ");                                      \
27   init##TYPE  (&g01##TYPE,  1);                                 \
28   init##TYPE  (&g02##TYPE,  2);                                 \
29   init##TYPE  (&g03##TYPE,  3);                                 \
30   init##TYPE  (&g04##TYPE,  4);                                 \
31   init##TYPE  (&g05##TYPE,  5);                                 \
32   init##TYPE  (&g06##TYPE,  6);                                 \
33   init##TYPE  (&g07##TYPE,  7);                                 \
34   init##TYPE  (&g08##TYPE,  8);                                 \
35   init##TYPE  (&g09##TYPE,  9);                                 \
36   init##TYPE  (&g10##TYPE, 10);                                 \
37   init##TYPE  (&g11##TYPE, 11);                                 \
38   init##TYPE  (&g12##TYPE, 12);                                 \
39   init##TYPE  (&g13##TYPE, 13);                                 \
40   init##TYPE  (&g14##TYPE, 14);                                 \
41   init##TYPE  (&g15##TYPE, 15);                                 \
42   init##TYPE  (&g16##TYPE, 16);                                 \
43   checkg##TYPE ();                                              \
44   DEBUG_NL;                                                     \
45   DEBUG_FPUTS (#TYPE);                                          \
46   DEBUG_FPUTS (" test0: ");                                     \
47   rslt = test0##TYPE ();                                        \
48   check##TYPE (rslt, 1);                                        \
49   DEBUG_NL;                                                     \
50   DEBUG_FPUTS (#TYPE);                                          \
51   DEBUG_FPUTS (" test1: ");                                     \
52   rslt = test1##TYPE (g01##TYPE);                               \
53   check##TYPE (rslt, 1);                                        \
54   if (test_va)                                                  \
55     {                                                           \
56       DEBUG_NL;                                                 \
57       DEBUG_FPUTS (#TYPE);                                      \
58       DEBUG_FPUTS (" testva: ");                                \
59       rslt = testva##TYPE (1, g01##TYPE);                       \
60       check##TYPE (rslt, 1);                                    \
61       rslt = testva##TYPE (5, g01##TYPE, g02##TYPE,             \
62                            g03##TYPE, g04##TYPE,                \
63                            g05##TYPE);                          \
64       check##TYPE (rslt, 5);                                    \
65       rslt = testva##TYPE (9, g01##TYPE, g02##TYPE,             \
66                            g03##TYPE, g04##TYPE,                \
67                            g05##TYPE, g06##TYPE,                \
68                            g07##TYPE, g08##TYPE,                \
69                            g09##TYPE);                          \
70       check##TYPE (rslt, 9);                                    \
71       rslt = testva##TYPE (16, g01##TYPE, g02##TYPE,            \
72                            g03##TYPE, g04##TYPE,                \
73                            g05##TYPE, g06##TYPE,                \
74                            g07##TYPE, g08##TYPE,                \
75                            g09##TYPE, g10##TYPE,                \
76                            g11##TYPE, g12##TYPE,                \
77                            g13##TYPE, g14##TYPE,                \
78                            g15##TYPE, g16##TYPE);               \
79       check##TYPE (rslt, 16);                                   \
80     }                                                           \
81   DEBUG_NL;                                                     \
82 }
83
84 #include "small-struct-defs.h"
85 #include "small-struct-check.h"
86
87 T(Sc)
88 T(Ss)
89 T(Si)
90 T(Scs)
91 T(Ssc)
92 T(Sic)
93 T(Sci)
94 T(Ssi)
95 T(Sis)
96 T(Scsi)
97 T(Scis)
98 T(Ssci)
99 T(Ssic)
100 T(Sisc)
101 T(Sics)
102
103 #undef T
104
105 void
106 struct_return_3_x ()
107 {
108 DEBUG_INIT
109
110 #define T(TYPE) testit##TYPE ();
111
112 T(Sc)
113 T(Ss)
114 T(Si)
115 T(Scs)
116 T(Ssc)
117 T(Sic)
118 T(Sci)
119 T(Ssi)
120 T(Sis)
121 T(Scsi)
122 T(Scis)
123 T(Ssci)
124 T(Ssic)
125 T(Sisc)
126 T(Sics)
127
128 DEBUG_FINI
129
130 if (fails != 0)
131   abort ();
132
133 #undef T
134 }