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.