Richard Guenther <[email protected]> writes:
> On Thu, Apr 5, 2012 at 1:20 PM, Rainer Orth <[email protected]>
> wrote:
>> Richard Guenther <[email protected]> writes:
>>
>>> Several passes needlessly cleanup EH after gsi_remove because they do
>>> not know whether the stmt was removed from EH regions. The following
>>> patch returns this information from gsi_remove and adjusts all users
>>> I could find appropriately.
>>
>> I suspect this patch caused a go1 SEGV compiling the non-PIC
>> libgo/exp/norm.o on i386-pc-solaris2.10:
>
> Ah. Try
>
> Index: gcc/tree-ssa-dse.c
> ===================================================================
> --- gcc/tree-ssa-dse.c (revision 186161)
> +++ gcc/tree-ssa-dse.c (working copy)
> @@ -232,6 +232,8 @@ dse_optimize_stmt (gimple_stmt_iterator
> gimple_get_lhs (use_stmt), 0)))
> || stmt_kills_ref_p (use_stmt, gimple_assign_lhs (stmt)))
> {
> + basic_block bb;
> +
> /* If use_stmt is or might be a nop assignment, e.g. for
> struct { ... } S a, b, *p; ...
> b = a; b = b;
> @@ -258,8 +260,9 @@ dse_optimize_stmt (gimple_stmt_iterator
> unlink_stmt_vdef (stmt);
>
> /* Remove the dead store. */
> + bb = gimple_bb (stmt);
> if (gsi_remove (&gsi, true))
> - bitmap_set_bit (need_eh_cleanup, gimple_bb (stmt)->index);
> + bitmap_set_bit (need_eh_cleanup, bb->index);
>
> /* And release any SSA_NAMEs set in this statement back to the
> SSA_NAME manager. */
>
Works fine on x86_64-unknown-linux-gnu, where the failure happened as
well.
Thanks.
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University