modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/stdarg-3.c (about) 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 struct S1 { int i; double d; int j; double e; } s1; 10 struct S2 { double d; long i; } s2; 11 int y; 12 13 void 14 bar (int v) 15 { 16 bar_arg = v; 17 } 18 19 void 20 f1 (int i, ...) 21 { 22 va_list ap; 23 va_start (ap, i); 24 while (i-- > 0) 25 x = va_arg (ap, long); 26 va_end (ap); 27 } 28 29 void 30 f2 (int i, ...) 31 { 32 va_list ap; 33 va_start (ap, i); 34 while (i-- > 0) 35 d = va_arg (ap, double); 36 va_end (ap); 37 } 38 39 void 40 f3 (int i, ...) 41 { 42 va_list ap; 43 int j = i; 44 while (j-- > 0) 45 { 46 va_start (ap, i); 47 x = va_arg (ap, long); 48 va_end (ap); 49 bar (x); 50 } 51 } 52 53 void 54 f4 (int i, ...) 55 { 56 va_list ap; 57 int j = i; 58 while (j-- > 0) 59 { 60 va_start (ap, i); 61 d = va_arg (ap, double); 62 va_end (ap); 63 bar (d + 4.0); 64 } 65 } 66 67 void 68 f5 (int i, ...) 69 { 70 va_list ap; 71 va_start (ap, i); 72 while (i-- > 0) 73 s1 = va_arg (ap, struct S1); 74 va_end (ap); 75 } 76 77 void 78 f6 (int i, ...) 79 { 80 va_list ap; 81 va_start (ap, i); 82 while (i-- > 0) 83 s2 = va_arg (ap, struct S2); 84 va_end (ap); 85 } 86 87 void 88 f7 (int i, ...) 89 { 90 va_list ap; 91 int j = i; 92 while (j-- > 0) 93 { 94 va_start (ap, i); 95 s1 = va_arg (ap, struct S1); 96 va_end (ap); 97 bar (s1.i); 98 } 99 } 100 101 void 102 f8 (int i, ...) 103 { 104 va_list ap; 105 int j = i; 106 while (j-- > 0) 107 { 108 va_start (ap, i); 109 s2 = va_arg (ap, struct S2); 110 y = va_arg (ap, int); 111 va_end (ap); 112 bar (s2.i); 113 } 114 } 115 116 int 117 main (void) 118 { 119 struct S1 a1, a3; 120 struct S2 a2, a4; 121 122 f1 (7, 1L, 2L, 3L, 5L, 7L, 9L, 11L, 13L); 123 if (x != 11L) 124 abort (); 125 f2 (6, 1.0, 2.0, 4.0, 8.0, 16.0, 32.0, 64.0); 126 if (d != 32.0) 127 abort (); 128 f3 (2, 1L, 3L); 129 if (bar_arg != 1L || x != 1L) 130 abort (); 131 f4 (2, 17.0, 19.0); 132 if (bar_arg != 21 || d != 17.0) 133 abort (); 134 a1.i = 131; 135 a1.j = 251; 136 a1.d = 15.0; 137 a1.e = 191.0; 138 a3 = a1; 139 a3.j = 254; 140 a3.e = 178.0; 141 f5 (2, a1, a3, a1); 142 if (s1.i != 131 || s1.j != 254 || s1.d != 15.0 || s1.e != 178.0) 143 abort (); 144 f5 (3, a1, a3, a1); 145 if (s1.i != 131 || s1.j != 251 || s1.d != 15.0 || s1.e != 191.0) 146 abort (); 147 a2.i = 138; 148 a2.d = 16.0; 149 a4.i = 257; 150 a4.d = 176.0; 151 f6 (2, a2, a4, a2); 152 if (s2.i != 257 || s2.d != 176.0) 153 abort (); 154 f6 (3, a2, a4, a2); 155 if (s2.i != 138 || s2.d != 16.0) 156 abort (); 157 f7 (2, a3, a1, a1); 158 if (s1.i != 131 || s1.j != 254 || s1.d != 15.0 || s1.e != 178.0) 159 abort (); 160 if (bar_arg != 131) 161 abort (); 162 f8 (3, a4, a2, a2); 163 if (s2.i != 257 || s2.d != 176.0) 164 abort (); 165 return 0; 166 }