diff options
author | Paolo Bonzini <bonzini@gnu.org> | 2009-05-11 16:05:45 +0000 |
---|---|---|
committer | Paolo Bonzini <bonzini@gcc.gnu.org> | 2009-05-11 16:05:45 +0000 |
commit | f5a1f0d01fa875ef6f2d895f990f4a2064b9d7f4 (patch) | |
tree | 87afb737192a4a6ae82fa278b87e9e7c4bd0c473 /gcc/gimplify.c | |
parent | c260f01fccf711d0915f7faa4c6a0f360cda2274 (diff) | |
download | gcc-f5a1f0d01fa875ef6f2d895f990f4a2064b9d7f4.zip gcc-f5a1f0d01fa875ef6f2d895f990f4a2064b9d7f4.tar.gz gcc-f5a1f0d01fa875ef6f2d895f990f4a2064b9d7f4.tar.bz2 |
re PR middle-end/40026 (ICE during gimplify_init_constructor)
2009-05-11 Paolo Bonzini <bonzini@gnu.org>
PR tree-optimization/40026
* gimplify.c (gimplify_init_constructor): Change initial conditional
to assertion. Rewrite TREE_OPERAND (*expr_p, 1) after
optimize_compound_literals_in_ctor.
testsuite:
2009-05-11 Paolo Bonzini <bonzini@gnu.org>
* gcc.c-torture/compile/pr40026.c: New testcase.
From-SVN: r147386
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r-- | gcc/gimplify.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 0c33dab..bff7cdd 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -3643,14 +3643,11 @@ static enum gimplify_status gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, bool want_value, bool notify_temp_creation) { - tree object, new_ctor; - tree ctor = TREE_OPERAND (*expr_p, 1); - tree type = TREE_TYPE (ctor); + tree object, ctor, type; enum gimplify_status ret; VEC(constructor_elt,gc) *elts; - if (TREE_CODE (ctor) != CONSTRUCTOR) - return GS_UNHANDLED; + gcc_assert (TREE_CODE (TREE_OPERAND (*expr_p, 1)) == CONSTRUCTOR); if (!notify_temp_creation) { @@ -3661,8 +3658,10 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, } object = TREE_OPERAND (*expr_p, 0); - new_ctor = optimize_compound_literals_in_ctor (ctor); - elts = CONSTRUCTOR_ELTS (new_ctor); + ctor = TREE_OPERAND (*expr_p, 1) = + optimize_compound_literals_in_ctor (TREE_OPERAND (*expr_p, 1)); + type = TREE_TYPE (ctor); + elts = CONSTRUCTOR_ELTS (ctor); ret = GS_ALL_DONE; switch (TREE_CODE (type)) |