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. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D79811/new/ https://reviews.llvm.org/D79811 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits