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:
Jan Hubicka 2009-04-05 20:33:13 +02:00 committed by Jan Hubicka
parent beb64b4a00
commit 12633413c6
2 changed files with 20 additions and 9 deletions

View File

@ -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>
* config.gcc (cygwin tm_file): Add cygwin-stdint.h.

View File

@ -1930,6 +1930,8 @@ sjlj_find_directly_reachable_regions (struct sjlj_lp_info *lp_info)
continue;
region = VEC_index (eh_region, cfun->eh->region_array, INTVAL (XEXP (note, 0)));
if (!region)
continue;
type_thrown = NULL_TREE;
if (region->type == ERT_THROW)
@ -2040,7 +2042,17 @@ sjlj_mark_call_sites (struct sjlj_lp_info *lp_info)
continue;
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
exception handling region in this function. Mark them as
@ -2053,14 +2065,7 @@ sjlj_mark_call_sites (struct sjlj_lp_info *lp_info)
continue;
}
else
{
/* 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;
}
this_call_site = lp_info[region->region_number].call_site_index;
if (this_call_site == last_call_site)
continue;