diff options
author | Jason Merrill <jason@redhat.com> | 2004-06-22 17:15:29 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2004-06-22 17:15:29 -0400 |
commit | 28c6dc635956b00d497d8d12cd95b61c47ebb2b8 (patch) | |
tree | f28bae23151fc0d321036e3591b21d3023877f30 | |
parent | 96a4ec035df0805444de4d6c67323f77ed0a79bc (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/stmtexpr3.C | 9 |
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(); }); } |