re PR bootstrap/15141 (MMIX breakage in except.c:connect_post_landing_pads:handle insns after actual call insn)

PR bootstrap/15141
	* except.c (connect_post_landing_pads): Delete insns after the
	barrier when generating a unwind_resume_libfunc call.

From-SVN: r81176
This commit is contained in:
Hans-Peter Nilsson 2004-04-26 03:17:08 +00:00 committed by Hans-Peter Nilsson
parent a978e17e31
commit 29c246a7a7
2 changed files with 21 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2004-04-26 Hans-Peter Nilsson <hp@bitrange.com>
PR bootstrap/15141
* except.c (connect_post_landing_pads): Delete insns after the
barrier when generating a unwind_resume_libfunc call.
2004-04-25 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
PR/c++ 15119

View File

@ -1830,8 +1830,21 @@ connect_post_landing_pads (void)
e->count = src->count;
}
else
emit_library_call (unwind_resume_libfunc, LCT_THROW,
VOIDmode, 1, cfun->eh->exc_ptr, ptr_mode);
{
emit_library_call (unwind_resume_libfunc, LCT_THROW,
VOIDmode, 1, cfun->eh->exc_ptr, ptr_mode);
/* What we just emitted was a throwing libcall, so it got a
barrier automatically added after it. If the last insn in
the libcall sequence isn't the barrier, it's because the
target emits multiple insns for a call, and there are insns
after the actual call insn (which are redundant and would be
optimized away). The barrier is inserted exactly after the
call insn, so let's go get that and delete the insns after
it, because below we need the barrier to be the last insn in
the sequence. */
delete_insns_since (NEXT_INSN (last_call_insn ()));
}
seq = get_insns ();
end_sequence ();