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

--- Comment #11 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:10db7573014008ff867098206f51012d501ab57b

commit r12-5148-g10db7573014008ff867098206f51012d501ab57b
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Nov 11 10:14:04 2021 +0100

    dwarf2out: Fix up field_byte_offset [PR101378]

    For PCC_BITFIELD_TYPE_MATTERS field_byte_offset has quite large code
    to deal with it since many years ago (see it e.g. in GCC 3.2, although it
    used to be on HOST_WIDE_INTs, then on double_ints, now on offset_ints).
    But that code apparently isn't able to cope with members with empty class
    types with [[no_unique_address]] attribute, because the empty classes have
    non-zero type size but zero decl size and so one can end up from the
    computation with negative offset or offset 1 byte smaller than it should
be.
    For !PCC_BITFIELD_TYPE_MATTERS, we just use
        tree_result = byte_position (decl);
    which seems exactly right even for the empty classes or anything which is
    not a bitfield (and for which we don't add DW_AT_bit_offset attribute).
    So, instead of trying to handle those no_unique_address members in the
    current already very complicated code, this limits it to bitfields.

    stor-layout.c PCC_BITFIELD_TYPE_MATTERS handling also affects only
    bitfields, twice it checks DECL_BIT_FIELD and once DECL_BIT_FIELD_TYPE.

    As discussed, this patch uses DECL_BIT_FIELD_TYPE check, because
    DECL_BIT_FIELD might be cleared for some bitfields with bitsizes
    multiple of BITS_PER_UNIT and e.g.
    struct S { int e; int a : 1, b : 7, c : 8, d : 16; } s;
    struct T { int a : 1, b : 7; long long c : 8; int d : 16; } t;

    int
    main ()
    {
      s.c = 0x55;
      s.d = 0xaaaa;
      t.c = 0x55;
      t.d = 0xaaaa;
      s.e++;
    }
    has different debug info with DECL_BIT_FIELD check.

    2021-11-11  Jakub Jelinek  <ja...@redhat.com>

            PR debug/101378
            * dwarf2out.c (field_byte_offset): Do the PCC_BITFIELD_TYPE_MATTERS
            handling only for DECL_BIT_FIELD_TYPE decls.

            * g++.dg/debug/dwarf2/pr101378.C: New test.
  • [Bug debug/101378] Negative DW_... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to