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

            Bug ID: 99388
           Summary: Invalid debug info for __fp16
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
  Target Milestone: ---

On:
void
foo (void)
{
  __fp16 a = 1.0;
  float b = 1.0;
  asm ("nop");
  a = 2.0;
  b = 2.0;
  asm ("nop");
  a = 3.0;
  b = 3.0;
  asm ("nop");
}
with -g -O2 -dA on aarch64-linux we emit:
.LLST0:
        .byte   0x7     // DW_LLE_start_end (*.LLST0)
        .8byte  .LVL0   // Location list begin address (*.LLST0)
        .8byte  .LVL1   // Location list end address (*.LLST0)
        .byte   0x4     // uleb128 0x4; Location expression size
        .byte   0x9e    // DW_OP_implicit_value
        .byte   0x2     // uleb128 0x2
        .byte   0x7     // DW_LLE_start_end (*.LLST0)
        .8byte  .LVL1   // Location list begin address (*.LLST0)
        .8byte  .LVL2   // Location list end address (*.LLST0)
        .byte   0x4     // uleb128 0x4; Location expression size
        .byte   0x9e    // DW_OP_implicit_value
        .byte   0x2     // uleb128 0x2
        .byte   0x7     // DW_LLE_start_end (*.LLST0)
        .8byte  .LVL2   // Location list begin address (*.LLST0)
        .8byte  .LFE0   // Location list end address (*.LLST0)
        .byte   0x4     // uleb128 0x4; Location expression size
        .byte   0x9e    // DW_OP_implicit_value
        .byte   0x2     // uleb128 0x2
        .byte   0       // DW_LLE_end_of_list (*.LLST0)
This is invalid, the uleb128 0x2 should be always followed by the 2 byte value,
but there is nothing, so we interpret the DW_LLE_start_end or whatever as parts
of the values.

Reply via email to