/* 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.  */
/* { dg-require-effective-target alloca } */

#include <stdarg.h>

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);
}
