aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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(); }); }