[RFC][PATCH][PR gdb/24154] Use real type for member functions with auto return type

Tom Tromey tom@tromey.com
Thu May 7 21:47:52 GMT 2020


Hannes> For this code:
Hannes> template<typename T>
Hannes> struct X
Hannes> {
Hannes> T value;
Hannes> auto get () { return value; }
Hannes> };
Hannes> X<int> x{1};

Tom> What does the resulting DWARF look like?
Tom> It would be good to have that in the commit message.

I compiled it myself and with gcc 9.3 I get:

 <2><37>: Abbrev Number: 4 (DW_TAG_subprogram)
    <38>   DW_AT_external    : 1
    <38>   DW_AT_name        : get
    <3c>   DW_AT_decl_file   : 1
    <3d>   DW_AT_decl_line   : 5
    <3e>   DW_AT_decl_column : 8
    <3f>   DW_AT_linkage_name: (indirect string, offset: 0xb): _ZN1XIiE3getEv
    <43>   DW_AT_type        : <0x64>
[...]
 <1><64>: Abbrev Number: 8 (DW_TAG_unspecified_type)
    <65>   DW_AT_name        : (indirect string, offset: 0x0): auto


This just seems like a compiler bug to me, and I think the return type
should either be 'int' or, ideally, the template parameter:

 <2><55>: Abbrev Number: 6 (DW_TAG_template_type_param)
    <56>   DW_AT_name        : T
    <58>   DW_AT_type        : <0x5d>

In my case there's no specification so I don't see how gdb could do
anything about this.

Tom


More information about the Gdb-patches mailing list