[Bug debug/122968] structured bindings for bitfields who does not start at a byte boundary do not have a location
woodard at redhat dot com
gcc-bugzilla@gcc.gnu.org
Wed Dec 3 20:38:52 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122968
--- Comment #7 from Ben Woodard <woodard at redhat dot com> ---
> Note, this is unfinished, for the !want_address && bitoff case it needs
> either also to punt or handle non-zero bitoff later on
> by shifting the value (depending on endianity?).
> Except this doesn't work, neither in gdb nor in lldb.
> <2><ea>: Abbrev Number: 1 (DW_TAG_variable)
> <eb> DW_AT_name : d
> <ed> DW_AT_decl_file : 1
> <ed> DW_AT_decl_line : 25
> <ee> DW_AT_decl_column : 10
> <ef> DW_AT_type : <0x140>
> <f3> DW_AT_location : 2 byte block: 91 5c (DW_OP_fbreg: -36)
> <2><f6>: Abbrev Number: 1 (DW_TAG_variable)
> <f7> DW_AT_name : e
> <f9> DW_AT_decl_file : 1
> <f9> DW_AT_decl_line : 25
> <fa> DW_AT_decl_column : 13
> <fb> DW_AT_type : <0x146>
> <ff> DW_AT_location : 5 byte block: 91 5c 9d 1a 5
> (DW_OP_fbreg: -36; DW_OP_bit_piece: size: 26 offset: 5 )
> <2><105>: Abbrev Number: 1 (DW_TAG_variable)
> <106> DW_AT_name : f
> <108> DW_AT_decl_file : 1
> <108> DW_AT_decl_line : 25
> <109> DW_AT_decl_column : 16
> <10a> DW_AT_type : <0x14c>
> <10e> DW_AT_location : 5 byte block: 91 5c 9d 1 1f
> (DW_OP_fbreg: -36; DW_OP_bit_piece: size: 1 offset: 31 )
> So, perhaps we can't use DW_OP_bit_piece and have to live with the read-only
> (i.e. DW_OP_stack_value) way with shifts.
Specifically regarding:
"Except this doesn't work, neither in gdb nor in lldb."
...
"So, perhaps we can't use DW_OP_bit_piece and have to live with the read-only"
Why is this not a bug in both gdb and lldb, from a DWARF perspective it seems
fine to me.
re:
"Note, this is unfinished, for the !want_address && bitoff case it needs
either also to punt or handle non-zero bitoff later on by shifting the value
(depending on endianity?)."
While working on DWARF6 one of the complaints that we had with DW_OP_bit_piece
is its sensitivity to endian. There were some calls to even remove DW_OP_piece
and DW_OP_bit_piece but it was decidied that it would be better to keep them in
DWARF6 for backward compatibilikty even if DW_OP_overlay is a better solution
in almost all cases.
More information about the Gcc-bugs
mailing list