/* PR c/3711 This testcase ICEd on IA-32 at -O0 and was miscompiled otherwise, because std_expand_builtin_va_arg didn't handle variable size types. */ #include extern void abort (void); extern void exit (int); void bar (int c) { static int d = '0'; if (c != d++) abort (); if (c < '0' || c > '9') abort (); } void foo (int size, ...) { struct { char x[size]; } d; va_list ap; int i; va_start (ap, size); d = va_arg (ap, typeof (d)); for (i = 0; i < size; i++) bar (d.x[i]); d = va_arg (ap, typeof (d)); for (i = 0; i < size; i++) bar (d.x[i]); va_end (ap); } int main (void) { int z = 5; struct { char a[z]; } x, y; x.a[0] = '0'; x.a[1] = '1'; x.a[2] = '2'; x.a[3] = '3'; x.a[4] = '4'; y.a[0] = '5'; y.a[1] = '6'; y.a[2] = '7'; y.a[3] = '8'; y.a[4] = '9'; foo (z, x, y); exit (0); }