From 12633413c6a0c00e21075294205cd432daa4461b Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Sun, 5 Apr 2009 20:33:13 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/except.c | 23 ++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b0f04056006..74b0f8d8820 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-04-04 Jan Hubicka + + * except.c (sjlj_find_directly_reachable_regions): Be ready for removed toplevel + regions. + (sjlj_mark_call_sites): Likewise. + 2009-04-04 Dave Korn * config.gcc (cygwin tm_file): Add cygwin-stdint.h. diff --git a/gcc/except.c b/gcc/except.c index 2651e99f2d4..e0e90d2a1fd 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -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; -- 2.30.2