diff options
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.dg/cpp/macro8.c | 29 |
2 files changed, 33 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 87d3d799..8a88b5e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-07-31 Neil Booth <neil@cat.daikokuya.demon.co.uk> + + * gcc.dg/cpp/macro8.c: New test. + 2001-07-27 Nathan Sidwell <nathan@codesourcery.com> * g++.dg/abi/vbase8-21.C: New test. diff --git a/gcc/testsuite/gcc.dg/cpp/macro8.c b/gcc/testsuite/gcc.dg/cpp/macro8.c new file mode 100644 index 0000000..f49b0be --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/macro8.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options -std=gnu89 } */ + +/* GCC 2.95.2 used to get the following variable argument macro + expansions wrong. + + Source: Neil Booth, from PR 3852 with persmission. 31 Jul 2001. */ + +#define TEST_WORSE(args...) (5, ## args) +#define TEST_BAD(foo, args...) (2, (foo), ## args) + +extern void abort (); + +static int add (int a, int b) +{ + return a + b; +} + +int main () +{ + /* Would expand to a single closing parenthesis, maybe because of + the "no args requires space" brokenness. */ + if (TEST_WORSE () != 5) + abort (); + /* The macro would expand to (0, (0) with a missing closing parenthesis. */ + if (add TEST_BAD (5) != 7) + abort (); + return 0; +} |
