Commit 98ce21b3 by Richard Henderson

except.c (sjlj_find_directly_reachable_regions): Don't consider RNL_BLOCKED a…

except.c (sjlj_find_directly_reachable_regions): Don't consider RNL_BLOCKED a directly reachable region.

        * except.c (sjlj_find_directly_reachable_regions): Don't
        consider RNL_BLOCKED a directly reachable region.
        (sjlj_assign_call_site_values): Trust directly_reachable.
        (sjlj_emit_dispatch_table): Likewise.

From-SVN: r47915
parent eb15dedd
2001-12-11 Richard Henderson <rth@redhat.com>
* except.c (sjlj_find_directly_reachable_regions): Don't
consider RNL_BLOCKED a directly reachable region.
(sjlj_assign_call_site_values): Trust directly_reachable.
(sjlj_emit_dispatch_table): Likewise.
2001-12-11 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.md (divmodsi_internal_er): Split, so that
we represent the address load's dependency on the gp.
(divmoddi_internal_er): Likewise.
......
......@@ -2014,6 +2014,7 @@ sjlj_find_directly_reachable_regions (lp_info)
for (insn = get_insns (); insn ; insn = NEXT_INSN (insn))
{
struct eh_region *region;
enum reachable_code rc;
tree type_thrown;
rtx note;
......@@ -2035,11 +2036,14 @@ sjlj_find_directly_reachable_regions (lp_info)
/* Find the first containing region that might handle the exception.
That's the landing pad to which we will transfer control. */
rc = RNL_NOT_CAUGHT;
for (; region; region = region->outer)
if (reachable_next_level (region, type_thrown, 0) != RNL_NOT_CAUGHT)
{
rc = reachable_next_level (region, type_thrown, 0);
if (rc != RNL_NOT_CAUGHT)
break;
if (region)
}
if (rc == RNL_MAYBE_CAUGHT || rc == RNL_CAUGHT)
{
lp_info[region->region_number].directly_reachable = 1;
found_one = true;
......@@ -2086,8 +2090,7 @@ sjlj_assign_call_site_values (dispatch_label, lp_info)
index = 0;
for (i = cfun->eh->last_region_number; i > 0; --i)
if (lp_info[i].directly_reachable
&& lp_info[i].action_index >= 0)
if (lp_info[i].directly_reachable)
lp_info[i].dispatch_index = index++;
/* Finally: assign call-site values. If dwarf2 terms, this would be
......@@ -2316,8 +2319,7 @@ sjlj_emit_dispatch_table (dispatch_label, lp_info)
first_reachable = 0;
for (i = cfun->eh->last_region_number; i > 0; --i)
{
if (! lp_info[i].directly_reachable
|| lp_info[i].action_index < 0)
if (! lp_info[i].directly_reachable)
continue;
if (! first_reachable)
......
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