aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-11-19 23:17:12 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-11-19 23:17:12 +0000
commit3afeafbce4c5663040b68407e3a6d9b75ba694d0 (patch)
tree07f19341ce0b4f7d2b1c212653ad7f42970ccc4a
parentb168ced90319bca53a0057dabf9786cc341c6c43 (diff)
downloadgcc-3afeafbce4c5663040b68407e3a6d9b75ba694d0.zip
gcc-3afeafbce4c5663040b68407e3a6d9b75ba694d0.tar.gz
gcc-3afeafbce4c5663040b68407e3a6d9b75ba694d0.tar.bz2
re PR c++/51216 (ICE with statement expression)
/cp 2011-11-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51216 * semantics.c (potential_constant_expression_1): Handle IF_STMT, DO_STMT, FOR_STMT, and WHILE_STMT. /testsuite 2011-11-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51216 * g++.dg/cpp0x/pr51216.C: New. From-SVN: r181517
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51216.C10
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index fa8e1e2..3d0f356 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2011-11-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/51216
+ * semantics.c (potential_constant_expression_1): Handle IF_STMT,
+ DO_STMT, FOR_STMT, and WHILE_STMT.
+
2011-11-18 Fabien ChĂȘne <fabien@gcc.gnu.org>
PR c++/51188
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index f70bdb3..fe685fa 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -8178,6 +8178,10 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
case EXPR_STMT:
case BIND_EXPR:
case TRANSACTION_EXPR:
+ case IF_STMT:
+ case DO_STMT:
+ case FOR_STMT:
+ case WHILE_STMT:
if (flags & tf_error)
error ("expression %qE is not a constant-expression", t);
return false;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5b579e0..861f36c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-11-19 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/51216
+ * g++.dg/cpp0x/pr51216.C: New.
+
2011-11-19 Eric Botcazou <ebotcazou@adacore.com>
* gcc.dg/delay-slot-2.c: New test.
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr51216.C b/gcc/testsuite/g++.dg/cpp0x/pr51216.C
new file mode 100644
index 0000000..4bdd071
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr51216.C
@@ -0,0 +1,10 @@
+// PR c++/51216
+// { dg-options "-std=c++0x" }
+
+void foo()
+{
+ int i = ({ if (1) ; }); // { dg-error "ignored" }
+ int j = ({ for (;;) ; }); // { dg-error "ignored" }
+ int k = ({ while (1) ; }); // { dg-error "ignored" }
+ int l = ({ do { } while (1); }); // { dg-error "ignored" }
+}