2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / gcc.dg / compat / struct-by-value-4_y.c
blob2541dd06d52e36c4d1a3063c31ec0fb63ed83d54
1 #include <stdarg.h>
3 #include "compat-common.h"
5 /* Turn off checking for variable arguments with -DSKIPVA. */
6 #ifdef SKIPVA
7 const int test_va = 0;
8 #else
9 const int test_va = 1;
10 #endif
12 typedef struct { char c; } Sc;
13 typedef struct { short s; } Ss;
14 typedef struct { int i; } Si;
15 typedef struct { short s; char c; } Ssc;
16 typedef struct { int i; short s; } Sis;
17 typedef struct { char c; short s; int i; } Scsi;
18 typedef struct { char c; int i; short s; } Scis;
20 void initSc (Sc *p, int i) { p->c = i/16; }
21 void initSs (Ss *p, int i) { p->s = i; }
22 void initSi (Si *p, int i) { p->i = i; }
23 void initSsc (Ssc *p, int i) { p->s = i; p->c = (i/16)+1; }
24 void initSis (Sis *p, int i) { p->i = i; p->s = i+1; }
25 void initScsi (Scsi *p, int i) { p->c = i/16; p->s = i+1; p->i = i+2; }
26 void initScis (Scis *p, int i) { p->c = i/16; p->i = i+1; p->s = i+2; }
28 #define T(N, TYPE) \
29 struct S##TYPE##N { TYPE i[N]; }; \
31 extern struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N; \
32 extern struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N; \
33 extern struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N; \
34 extern struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N; \
35 extern struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N; \
36 extern struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N; \
37 extern struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N; \
38 extern struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N; \
40 extern void check##TYPE (TYPE x, int i); \
41 extern void \
42 check##TYPE##N (struct S##TYPE##N *p, int i); \
44 void \
45 checkg##TYPE##N (void) \
46 { \
47 check##TYPE##N ( &g1s##TYPE##N, 1*16); \
48 check##TYPE##N ( &g2s##TYPE##N, 2*16); \
49 check##TYPE##N ( &g3s##TYPE##N, 3*16); \
50 check##TYPE##N ( &g4s##TYPE##N, 4*16); \
51 check##TYPE##N ( &g5s##TYPE##N, 5*16); \
52 check##TYPE##N ( &g6s##TYPE##N, 6*16); \
53 check##TYPE##N ( &g7s##TYPE##N, 7*16); \
54 check##TYPE##N ( &g8s##TYPE##N, 8*16); \
55 check##TYPE##N ( &g9s##TYPE##N, 9*16); \
56 check##TYPE##N (&g10s##TYPE##N, 10*16); \
57 check##TYPE##N (&g11s##TYPE##N, 11*16); \
58 check##TYPE##N (&g12s##TYPE##N, 12*16); \
59 check##TYPE##N (&g13s##TYPE##N, 13*16); \
60 check##TYPE##N (&g14s##TYPE##N, 14*16); \
61 check##TYPE##N (&g15s##TYPE##N, 15*16); \
62 check##TYPE##N (&g16s##TYPE##N, 16*16); \
63 } \
65 void \
66 test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2, \
67 struct S##TYPE##N s3, struct S##TYPE##N s4, \
68 struct S##TYPE##N s5, struct S##TYPE##N s6, \
69 struct S##TYPE##N s7, struct S##TYPE##N s8, \
70 struct S##TYPE##N s9, struct S##TYPE##N s10, \
71 struct S##TYPE##N s11, struct S##TYPE##N s12, \
72 struct S##TYPE##N s13, struct S##TYPE##N s14, \
73 struct S##TYPE##N s15, struct S##TYPE##N s16) \
74 { \
75 check##TYPE##N (&s1, 1*16); \
76 check##TYPE##N (&s2, 2*16); \
77 check##TYPE##N (&s3, 3*16); \
78 check##TYPE##N (&s4, 4*16); \
79 check##TYPE##N (&s5, 5*16); \
80 check##TYPE##N (&s6, 6*16); \
81 check##TYPE##N (&s7, 7*16); \
82 check##TYPE##N (&s8, 8*16); \
83 check##TYPE##N (&s9, 9*16); \
84 check##TYPE##N (&s10, 10*16); \
85 check##TYPE##N (&s11, 11*16); \
86 check##TYPE##N (&s12, 12*16); \
87 check##TYPE##N (&s13, 13*16); \
88 check##TYPE##N (&s14, 14*16); \
89 check##TYPE##N (&s15, 15*16); \
90 check##TYPE##N (&s16, 16*16); \
91 } \
93 void \
94 testva##TYPE##N (int n, ...) \
95 { \
96 int i; \
97 va_list ap; \
98 if (test_va) \
99 { \
100 va_start (ap, n); \
101 for (i = 0; i < n; i++) \
103 struct S##TYPE##N t = va_arg (ap, struct S##TYPE##N); \
104 check##TYPE##N (&t, (i+1)*16); \
106 va_end (ap); \
110 T(0, Sc)
111 T(1, Sc)
112 T(2, Sc)
113 T(3, Sc)
114 T(4, Sc)
115 T(5, Sc)
116 T(6, Sc)
117 T(7, Sc)
118 T(8, Sc)
119 T(9, Sc)
120 T(10, Sc)
121 T(11, Sc)
122 T(12, Sc)
123 T(13, Sc)
124 T(14, Sc)
125 T(15, Sc)
126 T(0, Ss)
127 T(1, Ss)
128 T(2, Ss)
129 T(3, Ss)
130 T(4, Ss)
131 T(5, Ss)
132 T(6, Ss)
133 T(7, Ss)
134 T(8, Ss)
135 T(9, Ss)
136 T(10, Ss)
137 T(11, Ss)
138 T(12, Ss)
139 T(13, Ss)
140 T(14, Ss)
141 T(15, Ss)
142 T(0, Si)
143 T(1, Si)
144 T(2, Si)
145 T(3, Si)
146 T(4, Si)
147 T(5, Si)
148 T(6, Si)
149 T(7, Si)
150 T(8, Si)
151 T(9, Si)
152 T(10, Si)
153 T(11, Si)
154 T(12, Si)
155 T(13, Si)
156 T(14, Si)
157 T(15, Si)