------- 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