[Lldb-commits] [PATCH] D79811: WIP: Reenable creation of artificial methods in AddMethodToCXXRecordType(...)

David Blaikie via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu May 14 17:58:57 PDT 2020

dblaikie added a comment.

In D79811#2036112 <https://reviews.llvm.org/D79811#2036112>, @labath wrote:

> Here's another interesting use of aritificial functions: inherited constructors.
>   struct A { A(int); };
>   struct B:A { using A::A; };
>   B b(2);
> The constructor B::B(int) will be marked artificial, but it is also not reconstructible from the debug info because it use explicit default initializers for all members in `B` (if they existed -- this example does not have any).
> This example also demonstrates what I believe *is* a bug in the compiler. The inherited constructor will get `DW_AT_name(A)`:
>   0x0000003f:   DW_TAG_structure_type
>                   DW_AT_calling_convention	(DW_CC_pass_by_value)
>                   DW_AT_name	("B")
>                   DW_AT_byte_size	(0x01)
>                   DW_AT_decl_file	("/home/pavelo/ll/build/opt/<stdin>")
>                   DW_AT_decl_line	(1)
>   0x00000048:     DW_TAG_inheritance
>                     DW_AT_type	(0x0000005f "A")
>                     DW_AT_data_member_location	(0x00)
>   0x0000004e:     DW_TAG_subprogram
>                     DW_AT_name	("A")
>                     DW_AT_declaration	(true)
>                     DW_AT_artificial	(true)
>                     DW_AT_external	(true)
> That doesn't sound correct to me. Gcc emits the name as `B`, which seems to be much better. Looping in @dblaikie for thoughts.

Agreed - sounds like a bug/something to fix in Clang there - if you'd like to fix it/file a bug/etc.



More information about the lldb-commits mailing list