1  /* { dg-do run { target { ! ia32 } } } */
       2  /* { dg-options "-O2" } */
       3  
       4  #include <stdarg.h>
       5  #include <assert.h>
       6  
       7  int n1 = 30;
       8  double n2 = 324;
       9  double n3 = 39494.94;
      10  double n4 = 407;
      11  double n5 = 32.304;
      12  double n6 = 394.14;
      13  double n7 = 4.07;
      14  double n8 = 32.4;
      15  double n9 = 314.194;
      16  double n10 = 0.1407;
      17  
      18  int e1;
      19  double e2;
      20  double e3;
      21  double e4;
      22  double e5;
      23  double e6;
      24  double e7;
      25  double e8;
      26  double e9;
      27  double e10;
      28  
      29  static void
      30  __attribute__((noinline))
      31  foo (va_list va_arglist)
      32  {
      33    e2 = va_arg (va_arglist, double);
      34    e3 = va_arg (va_arglist, double);
      35    e4 = va_arg (va_arglist, double);
      36    e5 = va_arg (va_arglist, double);
      37    e6 = va_arg (va_arglist, double);
      38    e7 = va_arg (va_arglist, double);
      39    e8 = va_arg (va_arglist, double);
      40    e9 = va_arg (va_arglist, double);
      41    e10 = va_arg (va_arglist, double);
      42  }
      43  
      44  static void
      45  __attribute__((noinline))
      46  test (int a1, ...)
      47  {
      48    va_list va_arglist;
      49    e1 = a1;
      50    va_start (va_arglist, a1);
      51    foo (va_arglist);
      52    va_end (va_arglist);
      53  }
      54  
      55  int
      56  main ()
      57  {
      58    test (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10);
      59    assert (n1 == e1);
      60    assert (n2 == e2);
      61    assert (n3 == e3);
      62    assert (n4 == e4);
      63    assert (n5 == e5);
      64    assert (n6 == e6);
      65    assert (n7 == e7);
      66    assert (n8 == e8);
      67    assert (n9 == e9);
      68    assert (n10 == e10);
      69    return 0;
      70  }