FSF GCC merge 02/23/03
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.other / vaarg2.C
blobfe1fa7eae0e1e140e302db6c36caf660768ea3da
1 // Copyright (C) 1999, 2000 Free Software Foundation, Inc.
2 // Contributed by Nathan Sidwell 4 Oct 1999 <nathan@acm.org>
4 // Make sure we can deal with POD aggregate in va_args
6 #include <stdarg.h>
7 extern "C" void abort ();
9 struct X {int m;};
10 struct Y {int a; int b; int c; int d; int e; int f;};
12 void fn1(va_list args)
14   int i = va_arg (args, int);
15   X x = va_arg (args, X);
16   Y y = va_arg (args, Y);
17   if (i != 1)
18     abort ();
19   if (x.m != 1)
20     abort ();
21   if (y.a != 1 || y.b != 2 || y.c != 3 || y.d != 4 ||
22       y.e != 5 || y.f != 6)
23     abort ();
26 void fn2(va_list args)
28   const int &i = va_arg (args, int);
29   const X &x = va_arg (args, X);
30   const Y &y = va_arg (args, Y);
31   if (i != 1)
32     abort ();
33   if (x.m != 1)
34     abort ();
35   if (y.a != 1 || y.b != 2 || y.c != 3 || y.d != 4 ||
36       y.e != 5 || y.f != 6)
37     abort ();
40 void
41 dispatch (int t, ...)
43   va_list args;
44   
45   va_start (args, t);
46   fn1 (args);
47   va_end (args);
48   
49   va_start (args, t);
50   fn2 (args);
51   va_end (args);
54 int main ()
56   X x = {1};
57   Y y = {1, 2, 3, 4, 5, 6};
58   
59   dispatch (0, 1, x, y);
60   
61   return 0;