https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96072

Kewen Lin <linkw at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |linkw at gcc dot gnu.org
             Status|WAITING                     |NEW

--- Comment #5 from Kewen Lin <linkw at gcc dot gnu.org> ---
Confirmed.

  if (DEFAULT_ABI == ABI_V4 || flag_shrink_wrap)
    {
      /* If the frame pointer was used then we can't delay emitting
         a REG_CFA_DEF_CFA note.  This must happen on the insn that
         restores the frame pointer, r31.  We may have already emitted
         a REG_CFA_DEF_CFA note, but that's OK;  A duplicate is
         discarded by dwarf2cfi.cc/dwarf2out.cc, and in any case would
         be harmless if emitted.  */
      if (frame_pointer_needed)
        {
          insn = get_last_insn ();
          add_reg_note (insn, REG_CFA_DEF_CFA,
                        plus_constant (Pmode, frame_reg_rtx, frame_off));
          RTX_FRAME_RELATED_P (insn) = 1;
        }

ICE since the insn here is (rtx) 0x0.

I think the code here has the assumption that the frame pointer restoring
happened ahead, it's:

  /* If we have a frame pointer, we can restore the old stack pointer
     from it.  */
  else if (frame_pointer_needed_indeed)
    {
      frame_reg_rtx = sp_reg_rtx;
      ....

Reply via email to