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