aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2004-06-22 17:15:29 -0400
committerJason Merrill <jason@gcc.gnu.org>2004-06-22 17:15:29 -0400
commit28c6dc635956b00d497d8d12cd95b61c47ebb2b8 (patch)
treef28bae23151fc0d321036e3591b21d3023877f30
parent96a4ec035df0805444de4d6c67323f77ed0a79bc (diff)
downloadgcc-28c6dc635956b00d497d8d12cd95b61c47ebb2b8.zip
gcc-28c6dc635956b00d497d8d12cd95b61c47ebb2b8.tar.gz
gcc-28c6dc635956b00d497d8d12cd95b61c47ebb2b8.tar.bz2
re PR c++/16112 (ICE with statement expression in return statement)
PR c++/16112 * cp-gimplify.c (cp_gimplify_init_expr): Look through CLEANUP_POINT_EXPR. From-SVN: r83514
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/cp-gimplify.c2
-rw-r--r--gcc/testsuite/g++.dg/ext/stmtexpr3.C9
3 files changed, 15 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 05ddba3..7838ab8 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2004-06-21 Jason Merrill <jason@redhat.com>
+
+ * cp-gimplify.c (cp_gimplify_init_expr): Look throug
+
2004-06-21 Mark Mitchell <mark@codesourcery.com>
* cp-tree.def (NEW_EXPR): Add a fourth slot.
diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c
index f9b2364..db88e05 100644
--- a/gcc/cp/cp-gimplify.c
+++ b/gcc/cp/cp-gimplify.c
@@ -116,6 +116,8 @@ cp_gimplify_init_expr (tree *expr_p, tree *pre_p, tree *post_p)
case, I guess we'll need to replace references somehow. */
if (TREE_CODE (from) == TARGET_EXPR)
from = TARGET_EXPR_INITIAL (from);
+ if (TREE_CODE (from) == CLEANUP_POINT_EXPR)
+ from = TREE_OPERAND (from, 0);
/* Look through any COMPOUND_EXPRs. */
sub = expr_last (from);
diff --git a/gcc/testsuite/g++.dg/ext/stmtexpr3.C b/gcc/testsuite/g++.dg/ext/stmtexpr3.C
new file mode 100644
index 0000000..9a3205c0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/stmtexpr3.C
@@ -0,0 +1,9 @@
+// PR c++/16112
+// { dg-options "" }
+
+struct A
+{
+ A();
+};
+
+A foo() { return ({ A(); }); }