------- Comment #3 from rguenth at gcc dot gnu dot org 2008-09-02 12:23 ------- Ok, try
Index: tree-sra.c =================================================================== *** tree-sra.c (revision 139886) --- tree-sra.c (working copy) *************** static gimple_seq *** 2144,2150 **** sra_build_assignment (tree dst, tree src) { gimple stmt; ! gimple_seq seq = 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 <var, sz, off> we produce --- 2144,2150 ---- sra_build_assignment (tree dst, tree src) { gimple stmt; ! 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 <var, sz, off> we produce *************** sra_build_assignment (tree dst, tree src *** 2308,2313 **** --- 2308,2315 ---- && !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; -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37328