Commit 83d7e8f0 by Jason Merrill Committed by Jason Merrill

re PR c++/31337 (ICE with statement expression)

        PR c++/31337
        * gimplify.c (gimplify_modify_expr): Discard the assignment of
        zero-sized types after calling gimplify_modify_expr_rhs.
        * testsuite/g++.dg/ext/stmtexpr11.C: New.

From-SVN: r127838
parent 9da72d66
2007-08-27 Jason Merrill <jason@redhat.com>
PR c++/31337
* gimplify.c (gimplify_modify_expr): Discard the assignment of
zero-sized types after calling gimplify_modify_expr_rhs.
2007-08-27 Sandra Loosemore <sandra@codesourcery.com> 2007-08-27 Sandra Loosemore <sandra@codesourcery.com>
* regclass.c (init_reg_autoinc): Fix typo. * regclass.c (init_reg_autoinc): Fix typo.
......
...@@ -3654,8 +3654,16 @@ gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, bool want_value) ...@@ -3654,8 +3654,16 @@ gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, bool want_value)
|| TREE_CODE (*expr_p) == GIMPLE_MODIFY_STMT || TREE_CODE (*expr_p) == GIMPLE_MODIFY_STMT
|| TREE_CODE (*expr_p) == INIT_EXPR); || TREE_CODE (*expr_p) == INIT_EXPR);
/* For zero sized types only gimplify the left hand side and right hand side /* See if any simplifications can be done based on what the RHS is. */
as statements and throw away the assignment. */ ret = gimplify_modify_expr_rhs (expr_p, from_p, to_p, pre_p, post_p,
want_value);
if (ret != GS_UNHANDLED)
return ret;
/* For zero sized types only gimplify the left hand side and right hand
side as statements and throw away the assignment. Do this after
gimplify_modify_expr_rhs so we handle TARGET_EXPRs of addressable
types properly. */
if (zero_sized_type (TREE_TYPE (*from_p))) if (zero_sized_type (TREE_TYPE (*from_p)))
{ {
gimplify_stmt (from_p); gimplify_stmt (from_p);
...@@ -3666,12 +3674,6 @@ gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, bool want_value) ...@@ -3666,12 +3674,6 @@ gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, bool want_value)
return GS_ALL_DONE; return GS_ALL_DONE;
} }
/* See if any simplifications can be done based on what the RHS is. */
ret = gimplify_modify_expr_rhs (expr_p, from_p, to_p, pre_p, post_p,
want_value);
if (ret != GS_UNHANDLED)
return ret;
/* If the value being copied is of variable width, compute the length /* If the value being copied is of variable width, compute the length
of the copy into a WITH_SIZE_EXPR. Note that we need to do this of the copy into a WITH_SIZE_EXPR. Note that we need to do this
before gimplifying any of the operands so that we can resolve any before gimplifying any of the operands so that we can resolve any
......
2007-08-27 Jason Merrill <jason@redhat.com>
PR c++/31337
* g++.dg/ext/stmtexpr11.C: New.
2007-08-27 Kazu Hirata <kazu@codesourcery.com> 2007-08-27 Kazu Hirata <kazu@codesourcery.com>
* lib/target-supports.exp (check_profiling_available): * lib/target-supports.exp (check_profiling_available):
// PR c++/31337
// { dg-options "" }
struct A
{
int i[0];
A();
A(const A&);
~A();
};
void foo()
{
A a = ({ A(); });
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment