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

Pavel Labath via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu May 14 05:20:28 PDT 2020

labath added a subscriber: dblaikie.
labath added a comment.

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.



More information about the lldb-commits mailing list