From 32e8aa9af19ca5ba91539abc13017cd94778245c Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Wed, 11 Feb 2004 23:50:45 +0000 Subject: [PATCH] re PR c/456 (constant expressions constraints (gcc.dg/c90-const-expr-1)) PR c/456 * cppexp.c (num_binary_op): Don't allow comma operators in #if constant expressions at all outside C99 mode if pedantic. testsuite: * gcc.dg/cpp/c90-if-comma-1.c, gcc.dg/cpp/c99-if-comma-1.c: New tests. From-SVN: r77676 --- gcc/ChangeLog | 6 ++++++ gcc/cppexp.c | 3 ++- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/cpp/c90-if-comma-1.c | 11 +++++++++++ gcc/testsuite/gcc.dg/cpp/c99-if-comma-1.c | 11 +++++++++++ 5 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/cpp/c90-if-comma-1.c create mode 100644 gcc/testsuite/gcc.dg/cpp/c99-if-comma-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22d06d6ee8a..6f2774bd715 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-02-11 Joseph S. Myers + + PR c/456 + * cppexp.c (num_binary_op): Don't allow comma operators in #if + constant expressions at all outside C99 mode if pedantic. + 2004-02-11 Uros Bizjak * optabs.h (enum optab_index): Add new OTI_log10 and OTI_log2. diff --git a/gcc/cppexp.c b/gcc/cppexp.c index c6f1f1d39a5..5603f5bd58a 100644 --- a/gcc/cppexp.c +++ b/gcc/cppexp.c @@ -1347,7 +1347,8 @@ num_binary_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op) /* Comma. */ default: /* case CPP_COMMA: */ - if (CPP_PEDANTIC (pfile) && !pfile->state.skip_eval) + if (CPP_PEDANTIC (pfile) && (!CPP_OPTION (pfile, c99) + || !pfile->state.skip_eval)) cpp_error (pfile, CPP_DL_PEDWARN, "comma operator in operand of #if"); lhs = rhs; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7c1aa663a8f..140302bb11d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-02-11 Joseph S. Myers + + PR c/456 + * gcc.dg/cpp/c90-if-comma-1.c, gcc.dg/cpp/c99-if-comma-1.c: New + tests. + 2004-02-11 Uros Bizjak * gcc.dg/builtins-33.c: New test. diff --git a/gcc/testsuite/gcc.dg/cpp/c90-if-comma-1.c b/gcc/testsuite/gcc.dg/cpp/c90-if-comma-1.c new file mode 100644 index 00000000000..c00403f16ad --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/c90-if-comma-1.c @@ -0,0 +1,11 @@ +/* Test for commas in constant expressions in #if: not permitted in C90 + but permitted in unevaluated subexpressions in C99. */ +/* Origin: Joseph Myers */ +/* { dg-do preprocess } */ +/* { dg-options "-std=iso9899:1990 -pedantic-errors" } */ + +#if (1, 2) /* { dg-error "comma" "evaluated comma" } */ +#endif + +#if 1 || (1, 2) /* { dg-error "comma" "unevaluated comma" } */ +#endif diff --git a/gcc/testsuite/gcc.dg/cpp/c99-if-comma-1.c b/gcc/testsuite/gcc.dg/cpp/c99-if-comma-1.c new file mode 100644 index 00000000000..cb8eb6f7363 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/c99-if-comma-1.c @@ -0,0 +1,11 @@ +/* Test for commas in constant expressions in #if: not permitted in C90 + but permitted in unevaluated subexpressions in C99. */ +/* Origin: Joseph Myers */ +/* { dg-do preprocess } */ +/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */ + +#if (1, 2) /* { dg-error "comma" "evaluated comma" } */ +#endif + +#if 1 || (1, 2) +#endif -- 2.30.2