except.c (sjlj_find_directly_reachable_regions): Be ready for removed toplevel regions.
* except.c (sjlj_find_directly_reachable_regions): Be ready for removed toplevel regions. (sjlj_mark_call_sites): Likewise. From-SVN: r145565
This commit is contained in:
parent
beb64b4a00
commit
12633413c6
@ -1,3 +1,9 @@
|
|||||||
|
2009-04-04 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
|
* except.c (sjlj_find_directly_reachable_regions): Be ready for removed toplevel
|
||||||
|
regions.
|
||||||
|
(sjlj_mark_call_sites): Likewise.
|
||||||
|
|
||||||
2009-04-04 Dave Korn <dave.korn.cygwin@gmail.com>
|
2009-04-04 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||||
|
|
||||||
* config.gcc (cygwin tm_file): Add cygwin-stdint.h.
|
* config.gcc (cygwin tm_file): Add cygwin-stdint.h.
|
||||||
|
23
gcc/except.c
23
gcc/except.c
@ -1930,6 +1930,8 @@ sjlj_find_directly_reachable_regions (struct sjlj_lp_info *lp_info)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
region = VEC_index (eh_region, cfun->eh->region_array, INTVAL (XEXP (note, 0)));
|
region = VEC_index (eh_region, cfun->eh->region_array, INTVAL (XEXP (note, 0)));
|
||||||
|
if (!region)
|
||||||
|
continue;
|
||||||
|
|
||||||
type_thrown = NULL_TREE;
|
type_thrown = NULL_TREE;
|
||||||
if (region->type == ERT_THROW)
|
if (region->type == ERT_THROW)
|
||||||
@ -2040,7 +2042,17 @@ sjlj_mark_call_sites (struct sjlj_lp_info *lp_info)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
|
note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
|
||||||
if (!note)
|
|
||||||
|
/* Calls that are known to not throw need not be marked. */
|
||||||
|
if (note && INTVAL (XEXP (note, 0)) <= 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (note)
|
||||||
|
region = VEC_index (eh_region, cfun->eh->region_array, INTVAL (XEXP (note, 0)));
|
||||||
|
else
|
||||||
|
region = NULL;
|
||||||
|
|
||||||
|
if (!region)
|
||||||
{
|
{
|
||||||
/* Calls (and trapping insns) without notes are outside any
|
/* Calls (and trapping insns) without notes are outside any
|
||||||
exception handling region in this function. Mark them as
|
exception handling region in this function. Mark them as
|
||||||
@ -2053,14 +2065,7 @@ sjlj_mark_call_sites (struct sjlj_lp_info *lp_info)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
this_call_site = lp_info[region->region_number].call_site_index;
|
||||||
/* Calls that are known to not throw need not be marked. */
|
|
||||||
if (INTVAL (XEXP (note, 0)) <= 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
region = VEC_index (eh_region, cfun->eh->region_array, INTVAL (XEXP (note, 0)));
|
|
||||||
this_call_site = lp_info[region->region_number].call_site_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this_call_site == last_call_site)
|
if (this_call_site == last_call_site)
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user