From: Richard Guenther Date: Wed, 3 Sep 2008 11:35:18 +0000 (+0000) Subject: re PR ada/37328 (ACATS la14021 ICE in gimple_assign_set_rhs1, at gimple.h:1747) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=44299c960128427cf464bd1d8f6497e2b4cfb2ed;p=gcc.git re PR ada/37328 (ACATS la14021 ICE in gimple_assign_set_rhs1, at gimple.h:1747) 2008-09-03 Richard Guenther PR tree-optimization/37328 * tree-sra.c (sra_build_assignment): Gimplify properly. (generate_copy_inout): Take the correct stmt as definition, remove bogus assert. From-SVN: r139931 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0affc98aa58..5e491e9752f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-09-03 Richard Guenther + + PR tree-optimization/37328 + * tree-sra.c (sra_build_assignment): Gimplify properly. + (generate_copy_inout): Take the correct stmt as definition, + remove bogus assert. + 2008-09-03 Bernd Schmidt * config/bfin/bfin.c (bfin_expand_prologue): Honour no_stack_limit diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index ea351ea9766..01f90844bd0 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -2144,7 +2144,7 @@ static gimple_seq sra_build_assignment (tree dst, tree src) { gimple stmt; - gimple_seq seq = NULL; + gimple_seq seq = NULL, seq2 = NULL; /* Turning BIT_FIELD_REFs into bit operations enables other passes to do a much better job at optimizing the code. From dst = BIT_FIELD_REF we produce @@ -2308,6 +2308,8 @@ sra_build_assignment (tree dst, tree src) && !useless_type_conversion_p (TREE_TYPE (dst), TREE_TYPE (src))) src = fold_convert (TREE_TYPE (dst), src); + src = force_gimple_operand (src, &seq2, false, NULL_TREE); + gimple_seq_add_seq (&seq, seq2); stmt = gimple_build_assign (dst, src); gimple_seq_add_stmt (&seq, stmt); return seq; @@ -2597,8 +2599,7 @@ generate_copy_inout (struct sra_elt *elt, bool copy_out, tree expr, t = build2 (COMPLEX_EXPR, elt->type, r, i); tmp_seq = sra_build_bf_assignment (expr, t); - gcc_assert (gimple_seq_singleton_p (tmp_seq)); - SSA_NAME_DEF_STMT (expr) = gimple_seq_first_stmt (tmp_seq); + SSA_NAME_DEF_STMT (expr) = gimple_seq_last_stmt (tmp_seq); gimple_seq_add_seq (seq_p, tmp_seq); } else if (elt->replacement)