public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug debug/113918] New: Incomplete DWARF5 debug information for anonymous unions
@ 2024-02-14  9:42 tsqurt at outlook dot com
  2024-02-14 10:10 ` [Bug debug/113918] " rguenth at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: tsqurt at outlook dot com @ 2024-02-14  9:42 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 113918
           Summary: Incomplete DWARF5 debug information for anonymous
                    unions
           Product: gcc
           Version: 13.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tsqurt at outlook dot com
  Target Milestone: ---

Created attachment 57421
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57421&action=edit
example.c

This is an academic finding and may not be a serious bug that urgently needs to
be fixed. Fixing it may help improve the user's debugging experience.

According to Programming languages — C, ISO/IEC9899:2017, Chapter 6, Section
7.2.1.13, the members of an anonymous structure or union are considered to be
members of the containing structure or union. However, this feature does not
seem to be reflected directly in the debug information. 

To check this problem, I use gcc-13.2.0 on Ubuntu 20.04.6 LTS, with the source
code example.c attached.

$gcc -o a.elf -std=c17 -gdwarf-5 --pedantic example.c
$objdump -g a.elf
...
 <1><2e>: Abbrev Number: 2 (DW_TAG_union_type)
    <2f>   DW_AT_byte_size   : 4
    <30>   DW_AT_decl_file   : 1
    <31>   DW_AT_decl_line   : 4
    <32>   DW_AT_decl_column : 5
    <33>   DW_AT_sibling     : <0x42>
...

According to DWARF Debugging Information Format Version 5, Chapter 5, Section
7.1, this union type declared in ‘A’ should have a DW_AT_export_symbols
attribute which indicates that member ‘x’ may be referenced as if ‘x’ is a
member of ‘A’.

To confirm that this issue is indeed a bug, I use GNU gdb (Ubuntu
9.2-0ubuntu1~20.04.1) 9.2, and start with shell command `gdb a.elf`.

$(gdb) b main
Breakpoint 1 at 0x40110a: file example.c, line 12.
$(gdb) run
Starting program: a.elf

Breakpoint 1, main () at example.c:12
$(gdb) expr x.z=20
$(gdb) expr x.y=20
gdb command line:1:2: error: ‘<U6720>’ has no member named ‘y’
Compilation failed.

In comparison, member ‘z’ does not share this problem. This behavior is
inconsistent with the C17 standard. I'm not sure if this problem should be down
to DWARF5, gdb or gcc, but I think gcc should be capable to address this issue. 

Discussion:
GCC has specified that the language is C17, so the debugger can deduce that ‘y’
is a member of ‘A’. But in DWARF5, debugging information is
language-independent, so the debugger may not be responsible to make the above
deduction based on the language C17. GCC should either generate a
DW_AT_export_symbols attribute for the anonymous union or a descendant node for
‘A’.

I do not know whether this is a bug or a feature. Please confirm this problem.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug debug/113918] Incomplete DWARF5 debug information for anonymous unions
  2024-02-14  9:42 [Bug debug/113918] New: Incomplete DWARF5 debug information for anonymous unions tsqurt at outlook dot com
@ 2024-02-14 10:10 ` rguenth at gcc dot gnu.org
  2024-02-15 12:52 ` jakub at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: rguenth at gcc dot gnu.org @ 2024-02-14 10:10 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2024-02-14
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed at least for the user side.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug debug/113918] Incomplete DWARF5 debug information for anonymous unions
  2024-02-14  9:42 [Bug debug/113918] New: Incomplete DWARF5 debug information for anonymous unions tsqurt at outlook dot com
  2024-02-14 10:10 ` [Bug debug/113918] " rguenth at gcc dot gnu.org
@ 2024-02-15 12:52 ` jakub at gcc dot gnu.org
  2024-03-08  8:30 ` cvs-commit at gcc dot gnu.org
  2024-03-08  9:00 ` jakub at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2024-02-15 12:52 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 57433
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57433&action=edit
gcc14-pr113918.patch

Untested patch to emit DW_AT_export_symbols for those cases.
That said, I believe GDB must have some code to handle anonymous structs/unions
even without that, because e.g. on this new testcase p s.i just works even
without the patch (and after all, should even in DWARF4 and earlier where such
attribute wasn't there at all).

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug debug/113918] Incomplete DWARF5 debug information for anonymous unions
  2024-02-14  9:42 [Bug debug/113918] New: Incomplete DWARF5 debug information for anonymous unions tsqurt at outlook dot com
  2024-02-14 10:10 ` [Bug debug/113918] " rguenth at gcc dot gnu.org
  2024-02-15 12:52 ` jakub at gcc dot gnu.org
@ 2024-03-08  8:30 ` cvs-commit at gcc dot gnu.org
  2024-03-08  9:00 ` jakub at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-03-08  8:30 UTC (permalink / raw)
  To: gcc-bugs

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

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

https://gcc.gnu.org/g:05109b1bd5ef4ee9d78fe17d4563889694a26d05

commit r14-9385-g05109b1bd5ef4ee9d78fe17d4563889694a26d05
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Fri Mar 8 09:14:32 2024 +0100

    dwarf2out: Emit DW_AT_export_symbols on anon unions/structs [PR113918]

    DWARF5 added DW_AT_export_symbols both for use on inline namespaces (where
    we emit it), but also on anonymous unions/structs (and we didn't emit that
    attribute there).
    The following patch fixes it.

    2024-03-08  Jakub Jelinek  <jakub@redhat.com>

            PR debug/113918
    gcc/
            * dwarf2out.cc (gen_field_die): Emit DW_AT_export_symbols
            on anonymous unions or structs for -gdwarf-5 or -gno-strict-dwarf.
    gcc/c/
            * c-tree.h (c_type_dwarf_attribute): Declare.
            * c-objc-common.h (LANG_HOOKS_TYPE_DWARF_ATTRIBUTE): Redefine.
            * c-objc-common.cc: Include dwarf2.h.
            (c_type_dwarf_attribute): New function.
    gcc/cp/
            * cp-objcp-common.cc (cp_type_dwarf_attribute): Return 1
            for DW_AT_export_symbols on anonymous structs or unions.
    gcc/testsuite/
            * c-c++-common/dwarf2/pr113918.c: New test.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug debug/113918] Incomplete DWARF5 debug information for anonymous unions
  2024-02-14  9:42 [Bug debug/113918] New: Incomplete DWARF5 debug information for anonymous unions tsqurt at outlook dot com
                   ` (2 preceding siblings ...)
  2024-03-08  8:30 ` cvs-commit at gcc dot gnu.org
@ 2024-03-08  9:00 ` jakub at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jakub at gcc dot gnu.org @ 2024-03-08  9:00 UTC (permalink / raw)
  To: gcc-bugs

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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Should be implemented now in GCC 14.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-03-08  9:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-14  9:42 [Bug debug/113918] New: Incomplete DWARF5 debug information for anonymous unions tsqurt at outlook dot com
2024-02-14 10:10 ` [Bug debug/113918] " rguenth at gcc dot gnu.org
2024-02-15 12:52 ` jakub at gcc dot gnu.org
2024-03-08  8:30 ` cvs-commit at gcc dot gnu.org
2024-03-08  9:00 ` jakub at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).