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
This commit is contained in:
Jason Merrill 2007-08-27 16:02:22 -04:00 committed by Jason Merrill
parent 9da72d6684
commit 83d7e8f06e
4 changed files with 36 additions and 8 deletions

View File

@ -1,3 +1,9 @@
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>
* regclass.c (init_reg_autoinc): Fix typo.

View File

@ -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) == INIT_EXPR);
/* For zero sized types only gimplify the left hand side and right hand side
as statements and throw away the assignment. */
/* 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;
/* 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)))
{
gimplify_stmt (from_p);
@ -3666,12 +3674,6 @@ gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, bool want_value)
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
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

View File

@ -1,3 +1,8 @@
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>
* lib/target-supports.exp (check_profiling_available):

View File

@ -0,0 +1,15 @@
// PR c++/31337
// { dg-options "" }
struct A
{
int i[0];
A();
A(const A&);
~A();
};
void foo()
{
A a = ({ A(); });
}