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

            Bug ID: 89952
           Summary: S/390: Inconsistent CFI info when restoring frame
                    pointer from fpr
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: krebbel at gcc dot gnu.org
  Target Milestone: ---

Created attachment 46082
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46082&action=edit
Testcase

Compiling the attached testcase with GCC built with checking enabled ICEs:

during RTL pass: dwarf2
t.c:10:1: internal compiler error: in maybe_record_trace_start, at
dwarf2cfi.c:2348                   
 }
 ^
0x13a7649 maybe_record_trace_start
        /home/andreas/gcc/gcc/dwarf2cfi.c:2348
0x13a9d6f scan_trace
        /home/andreas/gcc/gcc/dwarf2cfi.c:2541
0x13aa40b create_cfi_notes
        /home/andreas/gcc/gcc/dwarf2cfi.c:2694
0x13aa40b execute_dwarf2_frame
        /home/andreas/gcc/gcc/dwarf2cfi.c:3057
0x13aa40b execute
        /home/andreas/gcc/gcc/dwarf2cfi.c:3545

There is an edge from very early in the function to right before the call to
"j" which is executed as sibcall. In between the hard frame pointer (r11) is
saved to and FPR, set to the stack pointer and restored from the FPR. After
restoring the hard frame pointer register to its former value the backend
misses to set the CFA register back to r15. That's why the sibcall insn can be
reached with the CFA register being either r11 or r15.

Reply via email to