diff options
author | Nathan Sidwell <nathan@acm.org> | 1999-10-13 08:57:25 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 1999-10-13 08:57:25 +0000 |
commit | 7c4adc7fa84062a8af3d353bb58d094908ea8f7e (patch) | |
tree | b08f373dcbae93c31ed90ea301feb04e2de64e62 /gcc | |
parent | 356955cfb5f78224bc8c6d085d02d904ba84b4aa (diff) | |
download | gcc-7c4adc7fa84062a8af3d353bb58d094908ea8f7e.zip gcc-7c4adc7fa84062a8af3d353bb58d094908ea8f7e.tar.gz gcc-7c4adc7fa84062a8af3d353bb58d094908ea8f7e.tar.bz2 |
vaarg2.C: New test.
* g++.old-deja/g++.other/vaarg2.C: New test.
* g++.old-deja/g++.other/vaarg3.C: New test.
From-SVN: r29943
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/vaarg2.C | 62 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/vaarg3.C | 27 |
3 files changed, 94 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c8c5c03..4756349 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +1999-10-13 Nathan Sidwell <nathan@acm.org> + + * g++.old-deja/g++.other/vaarg2.C: New test. + * g++.old-deja/g++.other/vaarg3.C: New test. + 1999-10-12 Craig Burley <craig@jcb-sc.com> * g77.f-torture/noncompile/19990905-1.f: Moved from being diff --git a/gcc/testsuite/g++.old-deja/g++.other/vaarg2.C b/gcc/testsuite/g++.old-deja/g++.other/vaarg2.C new file mode 100644 index 0000000..aca5e21 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/vaarg2.C @@ -0,0 +1,62 @@ +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 4 Oct 1999 <nathan@acm.org> + +// Make sure we can deal with POD aggregate in va_args + +#include <stdarg.h> +extern 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; +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/vaarg3.C b/gcc/testsuite/g++.old-deja/g++.other/vaarg3.C new file mode 100644 index 0000000..4002e2d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/vaarg3.C @@ -0,0 +1,27 @@ +// Build don't link: + +// Copyright (C) 1999 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 4 Oct 1999 <nathan@acm.org> + +// Make sure we diagnose bad uses of va_arg + +#include <stdarg.h> + +struct X {int m;}; +struct Y : X {int m;}; +struct Z; // ERROR - forward decl +void fn1(va_list args) +{ + int i = va_arg (args, int); + Y x = va_arg (args, Y); // WARNING - cannot receive + Y y = va_arg (args, struct Y); // WARNING - cannot receive + int &r = va_arg (args, int &); // WARNING - cannot receive + + Z z1 = va_arg (args, Z); // ERROR - incomplete + const Z &z2 = va_arg (args, Z); // ERROR - incomplete + + va_arg (args, char); // ERROR - promote + va_arg (args, int []); // ERROR - promote + va_arg (args, int ()); // ERROR - promote + va_arg (args, bool); // ERROR - promote +} |