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

Reply via email to