aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <jsm@polyomino.org.uk>2004-02-11 23:50:45 +0000
committerJoseph Myers <jsm28@gcc.gnu.org>2004-02-11 23:50:45 +0000
commit32e8aa9af19ca5ba91539abc13017cd94778245c (patch)
treea6b7a99780e0752da0df83d39dc326af2f9b8261
parent3b8e0c9129b0ed3fe2e4aa5bc466df5348e2d5fd (diff)
downloadgcc-32e8aa9af19ca5ba91539abc13017cd94778245c.zip
gcc-32e8aa9af19ca5ba91539abc13017cd94778245c.tar.gz
gcc-32e8aa9af19ca5ba91539abc13017cd94778245c.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cppexp.c3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/cpp/c90-if-comma-1.c11
-rw-r--r--gcc/testsuite/gcc.dg/cpp/c99-if-comma-1.c11
5 files changed, 36 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 22d06d6..6f2774b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-02-11 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ 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 <uros@kss-loka.si>
* optabs.h (enum optab_index): Add new OTI_log10 and OTI_log2.
diff --git a/gcc/cppexp.c b/gcc/cppexp.c
index c6f1f1d..5603f5b 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 7c1aa66..140302b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2004-02-11 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ 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 <uros@kss-loka.si>
* 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 0000000..c00403f
--- /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 <jsm@polyomino.org.uk> */
+/* { 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 0000000..cb8eb6f
--- /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 <jsm@polyomino.org.uk> */
+/* { dg-do preprocess } */
+/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
+
+#if (1, 2) /* { dg-error "comma" "evaluated comma" } */
+#endif
+
+#if 1 || (1, 2)
+#endif