Richard Guenther <richard.guent...@gmail.com> writes:

> On Thu, Apr 5, 2012 at 1:20 PM, Rainer Orth <r...@cebitec.uni-bielefeld.de> 
> wrote:
>> Richard Guenther <rguent...@suse.de> 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

Reply via email to