// { dg-do run } // Copyright (C) 1999, 2000 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 4 Oct 1999 // Make sure we can deal with POD aggregate in va_args #include extern "C" void abort (); struct X {int m;}; struct Y {int a; int b; int c; int d; int e; int f;}; void fn1(va_list args) { int i = va_arg (args, int); X x = va_arg (args, X); Y y = va_arg (args, Y); if (i != 1) abort (); if (x.m != 1) abort (); if (y.a != 1 || y.b != 2 || y.c != 3 || y.d != 4 || y.e != 5 || y.f != 6) abort (); } void fn2(va_list args) { const int &i = va_arg (args, int); const X &x = va_arg (args, X); const Y &y = va_arg (args, Y); if (i != 1) abort (); if (x.m != 1) abort (); if (y.a != 1 || y.b != 2 || y.c != 3 || y.d != 4 || y.e != 5 || y.f != 6) abort (); } void dispatch (int t, ...) { va_list args; va_start (args, t); fn1 (args); va_end (args); va_start (args, t); fn2 (args); va_end (args); } int main () { X x = {1}; Y y = {1, 2, 3, 4, 5, 6}; dispatch (0, 1, x, y); return 0; }