This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: gcc 3.1 ICE in make_label_edge on hppa1.1-hp-hpux10.20--bootstrap fails


> 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);
!       }
      }
  }
  


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]