OSDN Git Service

* gcc.dg/compat/fp2-struct-check.h: New file.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / compat / struct-return-2_x.c
1 #include "compat-common.h"
2
3 /* Turn off checking for variable arguments with -DSKIPVA.  */
4 #ifdef SKIPVA
5 const int test_va = 0;
6 #else
7 const int test_va = 1;
8 #endif
9
10 #define T(N, NAME, TYPE)                                        \
11 struct S##NAME##N { TYPE i[N]; };                               \
12 struct S##NAME##N g1s##NAME##N, g2s##NAME##N;                   \
13 struct S##NAME##N g3s##NAME##N, g4s##NAME##N;                   \
14 struct S##NAME##N g5s##NAME##N, g6s##NAME##N;                   \
15 struct S##NAME##N g7s##NAME##N, g8s##NAME##N;                   \
16 struct S##NAME##N g9s##NAME##N, g10s##NAME##N;                  \
17 struct S##NAME##N g11s##NAME##N, g12s##NAME##N;                 \
18 struct S##NAME##N g13s##NAME##N, g14s##NAME##N;                 \
19 struct S##NAME##N g15s##NAME##N, g16s##NAME##N;                 \
20                                                                 \
21 extern void init##NAME##N (struct S##NAME##N *p, int i);        \
22 extern void checkg##NAME##N (void);                             \
23 extern struct S##NAME##N test0##NAME##N (void);                 \
24 extern struct S##NAME##N test1##NAME##N (struct S##NAME##N);    \
25 extern struct S##NAME##N testva##NAME##N (int n, ...);          \
26                                                                 \
27 void                                                            \
28 check##NAME##N (struct S##NAME##N *p, int i)                    \
29 {                                                               \
30   int j;                                                        \
31   DEBUG_DOT;                                                    \
32   for (j = 0; j < N; j++)                                       \
33     if (p->i[j] != (TYPE) (i + j))                              \
34       {                                                         \
35         DEBUG_FAIL;                                             \
36       }                                                         \
37 }                                                               \
38                                                                 \
39 void                                                            \
40 testit##NAME##N (void)                                          \
41 {                                                               \
42   struct S##NAME##N rslt;                                       \
43   DEBUG_FPUTS (#NAME "[" #N "]");                               \
44   DEBUG_FPUTS (" init: ");                                      \
45   init##NAME##N  ( &g1s##NAME##N,  1*16);                       \
46   init##NAME##N  ( &g2s##NAME##N,  2*16);                       \
47   init##NAME##N  ( &g3s##NAME##N,  3*16);                       \
48   init##NAME##N  ( &g4s##NAME##N,  4*16);                       \
49   init##NAME##N  ( &g5s##NAME##N,  5*16);                       \
50   init##NAME##N  ( &g6s##NAME##N,  6*16);                       \
51   init##NAME##N  ( &g7s##NAME##N,  7*16);                       \
52   init##NAME##N  ( &g8s##NAME##N,  8*16);                       \
53   init##NAME##N  ( &g9s##NAME##N,  9*16);                       \
54   init##NAME##N  (&g10s##NAME##N, 10*16);                       \
55   init##NAME##N  (&g11s##NAME##N, 11*16);                       \
56   init##NAME##N  (&g12s##NAME##N, 12*16);                       \
57   init##NAME##N  (&g13s##NAME##N, 13*16);                       \
58   init##NAME##N  (&g14s##NAME##N, 14*16);                       \
59   init##NAME##N  (&g15s##NAME##N, 15*16);                       \
60   init##NAME##N  (&g16s##NAME##N, 16*16);                       \
61   checkg##NAME##N ();                                           \
62   DEBUG_NL;                                                     \
63   DEBUG_FPUTS (#NAME "[" #N "]");                               \
64   DEBUG_FPUTS (" test0: ");                                     \
65   rslt = test0##NAME##N ();                                     \
66   check##NAME##N (&rslt, 1*16);                                 \
67   DEBUG_NL;                                                     \
68   DEBUG_FPUTS (#NAME "[" #N "]");                               \
69   DEBUG_FPUTS (" test1: ");                                     \
70   rslt = test1##NAME##N (g1s##NAME##N);                         \
71   check##NAME##N (&rslt, 1*16);                                 \
72   if (test_va)                                                  \
73     {                                                           \
74       DEBUG_NL;                                                 \
75       DEBUG_FPUTS (#NAME "[" #N "]");                           \
76       DEBUG_FPUTS (" testva: ");                                \
77       rslt = testva##NAME##N (1, g1s##NAME##N);                 \
78       check##NAME##N (&rslt, 1*16);                             \
79       rslt = testva##NAME##N (5,                                \
80                               g1s##NAME##N, g2s##NAME##N,       \
81                               g3s##NAME##N, g4s##NAME##N,       \
82                               g5s##NAME##N);                    \
83       check##NAME##N (&rslt, 5*16);                             \
84       rslt = testva##NAME##N (9,                                \
85                               g1s##NAME##N, g2s##NAME##N,       \
86                               g3s##NAME##N, g4s##NAME##N,       \
87                               g5s##NAME##N, g6s##NAME##N,       \
88                               g7s##NAME##N, g8s##NAME##N,       \
89                               g9s##NAME##N);                    \
90       check##NAME##N (&rslt, 9*16);                             \
91       rslt = testva##NAME##N (16,                               \
92                               g1s##NAME##N, g2s##NAME##N,       \
93                               g3s##NAME##N, g4s##NAME##N,       \
94                               g5s##NAME##N, g6s##NAME##N,       \
95                               g7s##NAME##N, g8s##NAME##N,       \
96                               g9s##NAME##N, g10s##NAME##N,      \
97                               g11s##NAME##N, g12s##NAME##N,     \
98                               g13s##NAME##N, g14s##NAME##N,     \
99                               g15s##NAME##N, g16s##NAME##N);    \
100       check##NAME##N (&rslt, 16*16);                            \
101     }                                                           \
102   DEBUG_NL;                                                     \
103 }
104
105 T(0, uc, unsigned char)
106 T(1, uc, unsigned char)
107 T(2, uc, unsigned char)
108 T(3, uc, unsigned char)
109 T(4, uc, unsigned char)
110 T(5, uc, unsigned char)
111 T(6, uc, unsigned char)
112 T(7, uc, unsigned char)
113 T(8, uc, unsigned char)
114 T(9, uc, unsigned char)
115 T(10, uc, unsigned char)
116 T(11, uc, unsigned char)
117 T(12, uc, unsigned char)
118 T(13, uc, unsigned char)
119 T(14, uc, unsigned char)
120 T(15, uc, unsigned char)
121 T(0, us, unsigned short)
122 T(1, us, unsigned short)
123 T(2, us, unsigned short)
124 T(3, us, unsigned short)
125 T(4, us, unsigned short)
126 T(5, us, unsigned short)
127 T(6, us, unsigned short)
128 T(7, us, unsigned short)
129 T(8, us, unsigned short)
130 T(9, us, unsigned short)
131 T(10, us, unsigned short)
132 T(11, us, unsigned short)
133 T(12, us, unsigned short)
134 T(13, us, unsigned short)
135 T(14, us, unsigned short)
136 T(15, us, unsigned short)
137 T(0, ui, unsigned int)
138 T(1, ui, unsigned int)
139 T(2, ui, unsigned int)
140 T(3, ui, unsigned int)
141 T(4, ui, unsigned int)
142 T(5, ui, unsigned int)
143 T(6, ui, unsigned int)
144 T(7, ui, unsigned int)
145 T(8, ui, unsigned int)
146 T(9, ui, unsigned int)
147 T(10, ui, unsigned int)
148 T(11, ui, unsigned int)
149 T(12, ui, unsigned int)
150 T(13, ui, unsigned int)
151 T(14, ui, unsigned int)
152 T(15, ui, unsigned int)
153
154 #undef T
155
156 void
157 struct_return_2_x ()
158 {
159 #define T(N, NAME, TYPE) testit##NAME##N ();
160
161 T(0, uc, unsigned char)
162 T(1, uc, unsigned char)
163 T(2, uc, unsigned char)
164 T(3, uc, unsigned char)
165 T(4, uc, unsigned char)
166 T(5, uc, unsigned char)
167 T(6, uc, unsigned char)
168 T(7, uc, unsigned char)
169 T(8, uc, unsigned char)
170 T(9, uc, unsigned char)
171 T(10, uc, unsigned char)
172 T(11, uc, unsigned char)
173 T(12, uc, unsigned char)
174 T(13, uc, unsigned char)
175 T(14, uc, unsigned char)
176 T(15, uc, unsigned char)
177 T(0, us, unsigned short)
178 T(1, us, unsigned short)
179 T(2, us, unsigned short)
180 T(3, us, unsigned short)
181 T(4, us, unsigned short)
182 T(5, us, unsigned short)
183 T(6, us, unsigned short)
184 T(7, us, unsigned short)
185 T(8, us, unsigned short)
186 T(9, us, unsigned short)
187 T(10, us, unsigned short)
188 T(11, us, unsigned short)
189 T(12, us, unsigned short)
190 T(13, us, unsigned short)
191 T(14, us, unsigned short)
192 T(15, us, unsigned short)
193 T(0, ui, unsigned int)
194 T(1, ui, unsigned int)
195 T(2, ui, unsigned int)
196 T(3, ui, unsigned int)
197 T(4, ui, unsigned int)
198 T(5, ui, unsigned int)
199 T(6, ui, unsigned int)
200 T(7, ui, unsigned int)
201 T(8, ui, unsigned int)
202 T(9, ui, unsigned int)
203 T(10, ui, unsigned int)
204 T(11, ui, unsigned int)
205 T(12, ui, unsigned int)
206 T(13, ui, unsigned int)
207 T(14, ui, unsigned int)
208 T(15, ui, unsigned int)
209
210 if (fails != 0)
211   abort ();
212
213 #undef T
214 }