comparison gcc/testsuite/gcc.c-torture/execute/stdarg-2.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 #include <stdarg.h>
2
3 extern void abort (void);
4
5 int foo_arg, bar_arg;
6 long x;
7 double d;
8 va_list gap;
9
10 void
11 foo (int v, va_list ap)
12 {
13 switch (v)
14 {
15 case 5:
16 foo_arg = va_arg (ap, int);
17 foo_arg += va_arg (ap, double);
18 foo_arg += va_arg (ap, long long);
19 break;
20 case 8:
21 foo_arg = va_arg (ap, long long);
22 foo_arg += va_arg (ap, double);
23 break;
24 case 11:
25 foo_arg = va_arg (ap, int);
26 foo_arg += va_arg (ap, long double);
27 break;
28 default:
29 abort ();
30 }
31 }
32
33 void
34 bar (int v)
35 {
36 if (v == 0x4002)
37 {
38 if (va_arg (gap, int) != 13 || va_arg (gap, double) != -14.0)
39 abort ();
40 }
41 bar_arg = v;
42 }
43
44 void
45 f1 (int i, ...)
46 {
47 va_start (gap, i);
48 x = va_arg (gap, long);
49 va_end (gap);
50 }
51
52 void
53 f2 (int i, ...)
54 {
55 va_start (gap, i);
56 bar (i);
57 va_end (gap);
58 }
59
60 void
61 f3 (int i, ...)
62 {
63 va_list aps[10];
64 va_start (aps[4], i);
65 x = va_arg (aps[4], long);
66 va_end (aps[4]);
67 }
68
69 void
70 f4 (int i, ...)
71 {
72 va_list aps[10];
73 va_start (aps[4], i);
74 bar (i);
75 va_end (aps[4]);
76 }
77
78 void
79 f5 (int i, ...)
80 {
81 va_list aps[10];
82 va_start (aps[4], i);
83 foo (i, aps[4]);
84 va_end (aps[4]);
85 }
86
87 struct A { int i; va_list g; va_list h[2]; };
88
89 void
90 f6 (int i, ...)
91 {
92 struct A a;
93 va_start (a.g, i);
94 x = va_arg (a.g, long);
95 va_end (a.g);
96 }
97
98 void
99 f7 (int i, ...)
100 {
101 struct A a;
102 va_start (a.g, i);
103 bar (i);
104 va_end (a.g);
105 }
106
107 void
108 f8 (int i, ...)
109 {
110 struct A a;
111 va_start (a.g, i);
112 foo (i, a.g);
113 va_end (a.g);
114 }
115
116 void
117 f10 (int i, ...)
118 {
119 struct A a;
120 va_start (a.h[1], i);
121 x = va_arg (a.h[1], long);
122 va_end (a.h[1]);
123 }
124
125 void
126 f11 (int i, ...)
127 {
128 struct A a;
129 va_start (a.h[1], i);
130 bar (i);
131 va_end (a.h[1]);
132 }
133
134 void
135 f12 (int i, ...)
136 {
137 struct A a;
138 va_start (a.h[1], i);
139 foo (i, a.h[1]);
140 va_end (a.h[1]);
141 }
142
143 int
144 main (void)
145 {
146 f1 (1, 79L);
147 if (x != 79L)
148 abort ();
149 f2 (0x4002, 13, -14.0);
150 if (bar_arg != 0x4002)
151 abort ();
152 f3 (3, 2031L);
153 if (x != 2031)
154 abort ();
155 f4 (4, 18);
156 if (bar_arg != 4)
157 abort ();
158 f5 (5, 1, 19.0, 18LL);
159 if (foo_arg != 38)
160 abort ();
161 f6 (6, 18L);
162 if (x != 18L)
163 abort ();
164 f7 (7);
165 if (bar_arg != 7)
166 abort ();
167 f8 (8, 2031LL, 13.0);
168 if (foo_arg != 2044)
169 abort ();
170 f10 (9, 180L);
171 if (x != 180L)
172 abort ();
173 f11 (10);
174 if (bar_arg != 10)
175 abort ();
176 f12 (11, 2030, 12.0L);
177 if (foo_arg != 2042)
178 abort ();
179 return 0;
180 }