This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: gcc 3.1 ICE in make_label_edge on hppa1.1-hp-hpux10.20--bootstrap fails
- To: John David Anglin <dave at hiauly1 dot hia dot nrc dot ca>, rth at cygnus dot com, gcc-patches at gcc dot gnu dot org, patches at x86-64 dot org
- Subject: Re: gcc 3.1 ICE in make_label_edge on hppa1.1-hp-hpux10.20--bootstrap fails
- From: Jan Hubicka <jh at suse dot cz>
- Date: Thu, 19 Jul 2001 16:14:05 +0200
- Cc: Jan Hubicka <jh at suse dot cz>
- References: <20010717191002.E2867@atrey.karlin.mff.cuni.cz> <200107181927.f6IJRNlD012402@hiauly1.hia.nrc.ca>
> Hi Jan,
>
> > I've sent short time ago fix to redirect_edge, that should fix many misterious
> > problems that have appeared recently. Can you please try that one and let me
> > know if it works? If not, can I have the preprocessed file, so I can try it on
> > cross-compiler?
>
> The patch didn't work. Here is the preprocessed filed.
The compiler crashes in constructing flowgraph at second cleanup_cfg call in
finish_eh_generation. The make_eh_edges asks except.c for the receiver of
RESX insn, but the tables no longer return valid values, so CFG construction
fails.
Proper fix is probably to remove the unneeded insns soon and not postnote
work to flow (originally it was done by jump_minimal)
Thu Jul 19 16:12:19 CEST 2001 Jan Hubicka <jh@suse.cz>
* except.c (connect_post_landing_pads): Cleanup RESX handlers.
Index: except.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/except.c,v
retrieving revision 1.173
diff -c -3 -p -r1.173 except.c
*** except.c 2001/07/16 20:54:43 1.173
--- except.c 2001/07/19 14:11:21
*************** static void
*** 1814,1819 ****
--- 1814,1820 ----
connect_post_landing_pads ()
{
int i;
+ rtx insn, next;
for (i = cfun->eh->last_region_number; i > 0; --i)
{
*************** connect_post_landing_pads ()
*** 1846,1853 ****
seq = get_insns ();
end_sequence ();
emit_insns_before (seq, region->resume);
!
! /* Leave the RESX to be deleted by flow. */
}
}
--- 1847,1865 ----
seq = get_insns ();
end_sequence ();
emit_insns_before (seq, region->resume);
! }
! /* Remove the RESX handlers. */
! for (insn = get_insns (); insn; insn = next)
! {
! next = NEXT_INSN (insn);
! if (GET_CODE (insn) == JUMP_INSN && GET_CODE (PATTERN (insn)) == RESX)
! {
! next = NEXT_INSN (next);
! if (GET_CODE (NEXT_INSN (insn)) != BARRIER)
! abort();
! flow_delete_insn (NEXT_INSN (insn));
! flow_delete_insn (insn);
! }
}
}