diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-04-23 00:06:58 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-04-23 00:06:58 +0200 |
commit | d7b5fa315012328dbd9b2fd6cb0e1c82942752c3 (patch) | |
tree | 5692fdd098bd754d9761dd4f49e80af93ed3a851 | |
parent | b2f06c39b01335127308567e5e074c3218011420 (diff) | |
download | gcc-d7b5fa315012328dbd9b2fd6cb0e1c82942752c3.zip gcc-d7b5fa315012328dbd9b2fd6cb0e1c82942752c3.tar.gz gcc-d7b5fa315012328dbd9b2fd6cb0e1c82942752c3.tar.bz2 |
re PR c++/35747 (ICE with undefined variable in statement expression)
PR c++/35747
* semantics.c (finish_stmt_expr): Call pop_stmt_list even if the stmt
expression is errorneous.
* g++.dg/ext/stmtexpr13.C: New test.
From-SVN: r134567
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/stmtexpr13.C | 9 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1ea3733..71bb45e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-04-22 Jakub Jelinek <jakub@redhat.com> + + PR c++/35747 + * semantics.c (finish_stmt_expr): Call pop_stmt_list even if the stmt + expression is errorneous. + 2008-04-21 Jason Merrill <jason@redhat.com> PR c++/35325 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 12cf387..f31235b 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1739,7 +1739,10 @@ finish_stmt_expr (tree stmt_expr, bool has_no_scope) tree result; if (error_operand_p (stmt_expr)) - return error_mark_node; + { + pop_stmt_list (stmt_expr); + return error_mark_node; + } gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index af0d320..cf689a4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-04-22 Jakub Jelinek <jakub@redhat.com> + + PR c++/35747 + * g++.dg/ext/stmtexpr13.C: New test. + 2008-04-22 Ian Lance Taylor <iant@google.com> * gcc.c-torture/compile/20080419-1.c: New test. diff --git a/gcc/testsuite/g++.dg/ext/stmtexpr13.C b/gcc/testsuite/g++.dg/ext/stmtexpr13.C new file mode 100644 index 0000000..978da15 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/stmtexpr13.C @@ -0,0 +1,9 @@ +// PR c++/35747 +// { dg-do compile } +// { dg-options "" } + +void +foo () +{ + ({ i; ({ i; }); 0; }); // { dg-error "was not declared" } +} |