[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.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D79811/new/
https://reviews.llvm.org/D79811
More information about the lldb-commits
mailing list