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