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