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.