mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-20 23:11:21 +08:00
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:
parent
a978e17e31
commit
29c246a7a7
@ -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
|
||||
|
17
gcc/except.c
17
gcc/except.c
@ -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 ();
|
||||
|
Loading…
x
Reference in New Issue
Block a user