[lldb][ClangExpression] Add asm() label to all FunctionDecls we create from DWARF
When resolving symbols during IR execution, lldb makes a last effort attempt to resolve external symbols from object files by approximate name matching. It currently uses `CPlusPlusNameParser` to parse the demangled function name and arguments for the unresolved symbol and its candidates. However, this hand-rolled C++ parser doesn’t support ABI tags which, depending on the demangler, get demangled into `[abi:tag]`. This lack of parsing support causes lldb to never consider a candidate mangled function name that has ABI tags. The issue reproduces by calling an ABI-tagged template function from the expression evaluator. This is particularly problematic with the recent addition of ABI tags to numerous libcxx APIs. The issue stems from the fact that `clang::CodeGen` emits function function calls using the mangled name inferred from the `FunctionDecl` LLDB constructs from DWARF. Debug info often lacks information for us to construct a perfect FunctionDecl resulting in subtle mangled name inaccuracies. This patch side-steps the problem of inaccurate `FunctionDecl`s by attaching an `asm()` label to each `FunctionDecl` LLDB creates from DWARF. `clang::CodeGen` consults this label to get the mangled name as one of the first courses of action when emitting a function call. LLDB already does this for C++ member functions as of [675767a5](https://reviews.llvm.org/D40283) **Testing** * Added API tests Differential Revision: https://reviews.llvm.org/D131974
Loading
Please sign in to comment