From: amodra Date: Tue, 6 Sep 2005 04:53:53 +0000 (+0000) Subject: PR middle-end/21460 X-Git-Tag: upstream/4.9.2~58790 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d2099aed4632e059c94011ce2500692e95e30b49;p=platform%2Fupstream%2Flinaro-gcc.git PR middle-end/21460 * except.c (sjlj_emit_function_enter): Find the function begin note even when it's not in first basic block. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103930 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4d135ad..88efaaf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-09-06 Alan Modra + + PR middle-end/21460 + * except.c (sjlj_emit_function_enter): Find the function begin + note even when it's not in first basic block. + 2005-09-06 Kelley Cook * acinclude.m4: Renamed from aclocal.m4. Delete AM_LANGINFO_CODESET, diff --git a/gcc/except.c b/gcc/except.c index df91a1b..91c9170 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -1728,6 +1728,7 @@ static void sjlj_emit_function_enter (rtx dispatch_label) { rtx fn_begin, fc, mem, seq; + bool fn_begin_outside_block; fc = cfun->eh->sjlj_fc; @@ -1783,23 +1784,20 @@ sjlj_emit_function_enter (rtx dispatch_label) do this in a block that is at loop level 0 and dominates all can_throw_internal instructions. */ + fn_begin_outside_block = true; for (fn_begin = get_insns (); ; fn_begin = NEXT_INSN (fn_begin)) - if (NOTE_P (fn_begin) - && (NOTE_LINE_NUMBER (fn_begin) == NOTE_INSN_FUNCTION_BEG - || NOTE_LINE_NUMBER (fn_begin) == NOTE_INSN_BASIC_BLOCK)) - break; - if (NOTE_LINE_NUMBER (fn_begin) == NOTE_INSN_FUNCTION_BEG) + if (NOTE_P (fn_begin)) + { + if (NOTE_LINE_NUMBER (fn_begin) == NOTE_INSN_FUNCTION_BEG) + break; + else if (NOTE_LINE_NUMBER (fn_begin) == NOTE_INSN_BASIC_BLOCK) + fn_begin_outside_block = false; + } + + if (fn_begin_outside_block) insert_insn_on_edge (seq, single_succ_edge (ENTRY_BLOCK_PTR)); else - { - rtx last = BB_END (single_succ (ENTRY_BLOCK_PTR)); - for (; ; fn_begin = NEXT_INSN (fn_begin)) - if ((NOTE_P (fn_begin) - && NOTE_LINE_NUMBER (fn_begin) == NOTE_INSN_FUNCTION_BEG) - || fn_begin == last) - break; - emit_insn_after (seq, fn_begin); - } + emit_insn_after (seq, fn_begin); } /* Call back from expand_function_end to know where we should put