aprantl added a comment. In D123319#3517966 <https://reviews.llvm.org/D123319#3517966>, @dblaikie wrote:
> In D123319#3506745 <https://reviews.llvm.org/D123319#3506745>, @shafik wrote: > >> > > What does the linkage name do for your use case? Which cases are missing > linkage names/where do they go missing? > >> I am happy to consider other approaches as well to solving lookup for local >> lambdas for D105564 <https://reviews.llvm.org/D105564>. Let me know what you >> think. > > Why does the return type help perform lookup? What kind of lookup? > > (again, my take is that "auto" return types probably shouldn't be described > at all - we should just not describe functions where we don't know their > return types because they're not very useful to know about (overload > resolution, yes, but then you can't call them anyway) - but that's a broader > argument to make/change to make) IIUC, the motivating problem is (@shafik please correct me if this isn't it) this: $ cat /tmp/lambda.cpp #include <cstdio> int main() { auto f = [](){ printf("hi from lambda\n"); return 1;} ; f(); f(); return f(); } $ clang++ -g /tmp/lambda.cpp -o /tmp/a.out $ lldb /tmp/a.out (lldb) b 5 (lldb) r (lldb) p f() hi from lambda (lldb) p auto val = f() error: expression failed to parse: error: <user expression 1>:1:6: variable has incomplete type 'void' auto val = f() ^ LLDB can't determine the return type of the lambda, because it has trouble matching up the abstract specification (with the `auto` return type) with the concrete definition (with the `int` return type): $ dwarfdump --name "operator()" /tmp/a.out.dSYM -p -c /tmp/a.out.dSYM/Contents/Resources/DWARF/a.out: file format Mach-O arm64 0x0000000b: DW_TAG_compile_unit DW_AT_producer ("Apple clang version 13.1.6 (clang-1316.0.21.2)") DW_AT_language (DW_LANG_C_plus_plus_14) DW_AT_name ("/tmp/lambda.cpp") DW_AT_LLVM_sysroot ("/Library/Developer/CommandLineTools/SDKs/MacOSX13.0.sdk") DW_AT_APPLE_sdk ("MacOSX13.0.sdk") DW_AT_stmt_list (0x00000000) DW_AT_comp_dir ("/Volumes/Data/swift") DW_AT_low_pc (0x0000000100003f28) DW_AT_high_pc (0x0000000100003f98) 0x000007c6: DW_TAG_subprogram DW_AT_low_pc (0x0000000100003f28) DW_AT_high_pc (0x0000000100003f6c) DW_AT_frame_base (DW_OP_reg29 W29) DW_AT_name ("main") DW_AT_decl_file ("/tmp/lambda.cpp") DW_AT_decl_line (2) DW_AT_type (0x000000000000029f "int") DW_AT_external (true) 0x000007ed: DW_TAG_class_type DW_AT_calling_convention (DW_CC_pass_by_value) DW_AT_byte_size (0x01) DW_AT_decl_file ("/tmp/lambda.cpp") DW_AT_decl_line (3) 0x000007f2: DW_TAG_subprogram DW_AT_name ("operator()") DW_AT_decl_file ("/tmp/lambda.cpp") DW_AT_decl_line (3) DW_AT_type (0x0000000000000806 "auto") DW_AT_declaration (true) DW_AT_accessibility (DW_ACCESS_public) 0x000007fe: DW_TAG_formal_parameter DW_AT_type (0x000000000000080b "const class *") DW_AT_artificial (true) 0x00000803: NULL 0x0000000b: DW_TAG_compile_unit DW_AT_producer ("Apple clang version 13.1.6 (clang-1316.0.21.2)") DW_AT_language (DW_LANG_C_plus_plus_14) DW_AT_name ("/tmp/lambda.cpp") DW_AT_LLVM_sysroot ("/Library/Developer/CommandLineTools/SDKs/MacOSX13.0.sdk") DW_AT_APPLE_sdk ("MacOSX13.0.sdk") DW_AT_stmt_list (0x00000000) DW_AT_comp_dir ("/Volumes/Data/swift") DW_AT_low_pc (0x0000000100003f28) DW_AT_high_pc (0x0000000100003f98) 0x00000815: DW_TAG_subprogram DW_AT_low_pc (0x0000000100003f6c) DW_AT_high_pc (0x0000000100003f98) DW_AT_frame_base (DW_OP_reg29 W29) DW_AT_object_pointer (0x00000834) DW_AT_type (0x000000000000029f "int") DW_AT_linkage_name ("_ZZ4mainENK3$_0clEv") DW_AT_specification (0x00000000000007f2 "operator()") 0x00000834: DW_TAG_formal_parameter DW_AT_location (DW_OP_breg31 WSP+8) DW_AT_name ("this") DW_AT_type (0x0000000000000841 "const class *") DW_AT_artificial (true) 0x00000840: NULL Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D123319/new/ https://reviews.llvm.org/D123319 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits