cc1plus (sjlj eh) bootstrap hangs in sched.c

Donn Terry donn@interix.com
Fri Apr 30 23:15:00 GMT 1999


Andrew asked me to post exactly what worked for me; it appears
there is some whitespace difference problem.  This is what worked
for me on the egcs sources based on Andrew's patch.  This is
just for those who need a quick fix; Andrew says he'll be applying
the official one here pretty soon.

Donn



===================================================
Donn Terry                  mailto:donn@interix.com
Softway Systems, Inc.        http://www.interix.com
2850 McClelland Dr, Ste. 1800   Ft.Collins CO 80525
Tel: +1-970-204-9900           Fax: +1-970-204-9951
===================================================
--- flow.c.pre.am	Mon Apr 19 10:55:03 1999
+++ flow.c	Mon Apr 19 11:01:24 1999
@@ -435,7 +435,6 @@
   register RTX_CODE prev_code;
   register int count = 0;
   int eh_region = 0;
-  int in_libcall_block = 0;
   int call_had_abnormal_edge = 0;
   rtx prev_call = NULL_RTX;
 
@@ -444,11 +443,6 @@
     {
       register RTX_CODE code = GET_CODE (insn);
 
-      /* Track when we are inside in LIBCALL block.  */
-      if (GET_RTX_CLASS (code) == 'i'
-	  && find_reg_note (insn, REG_LIBCALL, NULL_RTX))
-	in_libcall_block = 1;
-
       if (code == CODE_LABEL
 	  || (GET_RTX_CLASS (code) == 'i'
 	      && (prev_code == JUMP_INSN
@@ -475,9 +469,7 @@
 	{
 	  prev_call = insn;
 	  call_had_abnormal_edge = 0;
-	  if (nonlocal_goto_handler_labels)
-	    call_had_abnormal_edge = !in_libcall_block;
-	  else if (eh_region)
+          if (eh_region || nonlocal_goto_handler_labels)
 	    {
 	      rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
 	      if (!note || XINT (XEXP (note, 0), 0) != 0)
@@ -494,9 +486,6 @@
       else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_END)
 	--eh_region;
 
-      if (GET_RTX_CLASS (GET_CODE (insn)) == 'i'
-	  && find_reg_note (insn, REG_RETVAL, NULL_RTX))
-	in_libcall_block = 0;
     }
 
   /* The rest of the compiler works a bit smoother when we don't have to
@@ -527,7 +516,6 @@
      rtx *bb_eh_end;
 {
   register rtx insn, next;
-  int in_libcall_block = 0;
   int call_has_abnormal_edge = 0;
   int i = 0;
   rtx bb_note = NULL_RTX;
@@ -548,18 +536,11 @@
 
       next = NEXT_INSN (insn);
 
-      /* Track when we are inside in LIBCALL block.  */
-      if (GET_RTX_CLASS (code) == 'i'
-	  && find_reg_note (insn, REG_LIBCALL, NULL_RTX))
-	in_libcall_block = 1;
-
       if (code == CALL_INSN)
 	{
 	  /* Record whether this call created an edge.  */
 	  call_has_abnormal_edge = 0;
-	  if (nonlocal_goto_handler_labels)
-	    call_has_abnormal_edge = !in_libcall_block;
-	  else if (eh_list)
+          if (eh_list || nonlocal_goto_handler_labels)
 	    {
 	      rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
 	      if (!note || XINT (XEXP (note, 0), 0) != 0)
@@ -722,9 +703,6 @@
 		    = gen_rtx_EXPR_LIST (VOIDmode, XEXP (note, 0),
 				         label_value_list);
 	      }
-
-	  if (find_reg_note (insn, REG_RETVAL, NULL_RTX))
-	    in_libcall_block = 0;
 	}
     }
 


More information about the Gcc-bugs mailing list