Commit 45053eaf by Richard Henderson

except.c (remove_fixup_regions): Adjust REG_EH_REGION notes to the parent of the fixup region.

        * except.c (remove_fixup_regions): Adjust REG_EH_REGION notes
        to the parent of the fixup region.

From-SVN: r41867
parent 2a9071bb
2001-05-05 Jakub Jelinek <jakub@redhat.com 2001-05-05 Richard Henderson <rth@redhat.com>
* except.c (remove_fixup_regions): Adjust REG_EH_REGION notes
to the parent of the fixup region.
2001-05-05 Jakub Jelinek <jakub@redhat.com>
* gcc.c (cpp_options): Define __NO_INLINE__ unless we are honoring * gcc.c (cpp_options): Define __NO_INLINE__ unless we are honoring
"inline" keyword. "inline" keyword.
......
...@@ -1101,11 +1101,30 @@ static void ...@@ -1101,11 +1101,30 @@ static void
remove_fixup_regions () remove_fixup_regions ()
{ {
int i; int i;
rtx insn, note;
struct eh_region *fixup;
/* Walk the insn chain and adjust the REG_EH_REGION numbers
for instructions referencing fixup regions. This is only
strictly necessary for fixup regions with no parent, but
doesn't hurt to do it for all regions. */
for (insn = get_insns(); insn ; insn = NEXT_INSN (insn))
if (INSN_P (insn)
&& (note = find_reg_note (insn, REG_EH_REGION, NULL))
&& INTVAL (XEXP (note, 0)) > 0
&& (fixup = cfun->eh->region_array[INTVAL (XEXP (note, 0))])
&& fixup->type == ERT_FIXUP)
{
if (fixup->u.fixup.real_region)
XEXP (note, 1) = GEN_INT (fixup->u.fixup.real_region->region_number);
else
remove_note (insn, note);
}
/* Remove the fixup regions from the tree. */
for (i = cfun->eh->last_region_number; i > 0; --i) for (i = cfun->eh->last_region_number; i > 0; --i)
{ {
struct eh_region *fixup = cfun->eh->region_array[i]; fixup = cfun->eh->region_array[i];
if (! fixup) if (! fixup)
continue; continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment