------- Comment #5 from rakdver at gcc dot gnu dot org 2005-11-09 22:30 -------
I am testing the following patch:
Index: except.c
===================================================================
*** except.c (revision 106702)
--- except.c (working copy)
*************** dw2_build_landing_pads (void)
*** 1527,1543 ****
/* If the eh_return data registers are call-saved, then we
won't have considered them clobbered from the call that
! threw. Kill them now. */
for (j = 0; ; ++j)
{
unsigned r = EH_RETURN_DATA_REGNO (j);
if (r == INVALID_REGNUM)
break;
! if (! call_used_regs[r])
! {
! emit_insn (gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, r)));
! clobbers_hard_regs = true;
! }
}
if (clobbers_hard_regs)
--- 1527,1544 ----
/* If the eh_return data registers are call-saved, then we
won't have considered them clobbered from the call that
! threw. But we need to clobber all hard registers, since
! df.c assumes that call clobbers are not definitions
! (normally it is invalid to use call-clobbered register
! after the call). */
for (j = 0; ; ++j)
{
unsigned r = EH_RETURN_DATA_REGNO (j);
if (r == INVALID_REGNUM)
break;
!
! emit_insn (gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, r)));
! clobbers_hard_regs = true;
}
if (clobbers_hard_regs)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24762