Merge to HEAD at tree-cleanup-merge-20041024 .
[official-gcc.git] / gcc / testsuite / gcc.dg / compat / struct-by-value-8_y.c
blobb246fd44893b14e57777946175242f2a6894e058
1 #include <stdarg.h>
3 #include "compat-common.h"
5 #ifdef SKIP_VA
6 const int test_va = 0;
7 #else
8 const int test_va = 1;
9 #endif
11 typedef struct { char c; } Sc;
12 typedef struct { short s; } Ss;
13 typedef struct { int i; } Si;
14 typedef struct { short s; char c; } Ssc;
15 typedef struct { int i; short s; } Sis;
16 typedef struct { char c; short s; int i; } Scsi;
17 typedef struct { char c; int i; short s; } Scis;
19 void initSc (Sc *p, int i) { p->c = i/16; }
20 void initSs (Ss *p, int i) { p->s = i; }
21 void initSi (Si *p, int i) { p->i = i; }
22 void initSsc (Ssc *p, int i) { p->s = i; p->c = (i/16)+1; }
23 void initSis (Sis *p, int i) { p->i = i; p->s = i+1; }
24 void initScsi (Scsi *p, int i) { p->c = i/16; p->s = i+1; p->i = i+2; }
25 void initScis (Scis *p, int i) { p->c = i/16; p->i = i+1; p->s = i+2; }
27 #define T(N, TYPE) \
28 struct S##TYPE##N { TYPE i[N]; }; \
30 extern struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N; \
31 extern struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N; \
32 extern struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N; \
33 extern struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N; \
34 extern struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N; \
35 extern struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N; \
36 extern struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N; \
37 extern struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N; \
39 extern void check##TYPE (TYPE x, int i); \
40 extern void \
41 check##TYPE##N (struct S##TYPE##N *p, int i); \
43 void \
44 checkg##TYPE##N (void) \
45 { \
46 check##TYPE##N ( &g1s##TYPE##N, 1*16); \
47 check##TYPE##N ( &g2s##TYPE##N, 2*16); \
48 check##TYPE##N ( &g3s##TYPE##N, 3*16); \
49 check##TYPE##N ( &g4s##TYPE##N, 4*16); \
50 check##TYPE##N ( &g5s##TYPE##N, 5*16); \
51 check##TYPE##N ( &g6s##TYPE##N, 6*16); \
52 check##TYPE##N ( &g7s##TYPE##N, 7*16); \
53 check##TYPE##N ( &g8s##TYPE##N, 8*16); \
54 check##TYPE##N ( &g9s##TYPE##N, 9*16); \
55 check##TYPE##N (&g10s##TYPE##N, 10*16); \
56 check##TYPE##N (&g11s##TYPE##N, 11*16); \
57 check##TYPE##N (&g12s##TYPE##N, 12*16); \
58 check##TYPE##N (&g13s##TYPE##N, 13*16); \
59 check##TYPE##N (&g14s##TYPE##N, 14*16); \
60 check##TYPE##N (&g15s##TYPE##N, 15*16); \
61 check##TYPE##N (&g16s##TYPE##N, 16*16); \
62 } \
64 void \
65 test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2, \
66 struct S##TYPE##N s3, struct S##TYPE##N s4, \
67 struct S##TYPE##N s5, struct S##TYPE##N s6, \
68 struct S##TYPE##N s7, struct S##TYPE##N s8, \
69 struct S##TYPE##N s9, struct S##TYPE##N s10, \
70 struct S##TYPE##N s11, struct S##TYPE##N s12, \
71 struct S##TYPE##N s13, struct S##TYPE##N s14, \
72 struct S##TYPE##N s15, struct S##TYPE##N s16) \
73 { \
74 check##TYPE##N (&s1, 1*16); \
75 check##TYPE##N (&s2, 2*16); \
76 check##TYPE##N (&s3, 3*16); \
77 check##TYPE##N (&s4, 4*16); \
78 check##TYPE##N (&s5, 5*16); \
79 check##TYPE##N (&s6, 6*16); \
80 check##TYPE##N (&s7, 7*16); \
81 check##TYPE##N (&s8, 8*16); \
82 check##TYPE##N (&s9, 9*16); \
83 check##TYPE##N (&s10, 10*16); \
84 check##TYPE##N (&s11, 11*16); \
85 check##TYPE##N (&s12, 12*16); \
86 check##TYPE##N (&s13, 13*16); \
87 check##TYPE##N (&s14, 14*16); \
88 check##TYPE##N (&s15, 15*16); \
89 check##TYPE##N (&s16, 16*16); \
90 } \
92 void \
93 testva##TYPE##N (int n, ...) \
94 { \
95 int i; \
96 va_list ap; \
97 if (test_va) \
98 { \
99 va_start (ap, n); \
100 for (i = 0; i < n; i++) \
102 struct S##TYPE##N t = va_arg (ap, struct S##TYPE##N); \
103 check##TYPE##N (&t, (i+1)*16); \
105 va_end (ap); \
109 #ifndef SKIP_ZERO_ARRAY
110 T(0, Ssc)
111 #endif
112 T(1, Ssc)
113 T(2, Ssc)
114 T(3, Ssc)
115 T(4, Ssc)
116 T(5, Ssc)
117 T(6, Ssc)
118 T(7, Ssc)
119 T(8, Ssc)
120 T(9, Ssc)
121 T(10, Ssc)
122 T(11, Ssc)
123 T(12, Ssc)
124 T(13, Ssc)
125 T(14, Ssc)
126 T(15, Ssc)
127 #ifndef SKIP_ZERO_ARRAY
128 T(0, Sis)
129 #endif
130 T(1, Sis)
131 T(2, Sis)
132 T(3, Sis)
133 T(4, Sis)
134 T(5, Sis)
135 T(6, Sis)
136 T(7, Sis)
137 T(8, Sis)
138 T(9, Sis)
139 T(10, Sis)
140 T(11, Sis)
141 T(12, Sis)
142 T(13, Sis)
143 T(14, Sis)
144 T(15, Sis)