Index: source/Expression/ClangExpressionDeclMap.cpp =================================================================== --- source/Expression/ClangExpressionDeclMap.cpp +++ source/Expression/ClangExpressionDeclMap.cpp @@ -47,6 +47,8 @@ #include "lldb/Target/Target.h" #include "lldb/Target/Thread.h" +#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h" + using namespace lldb; using namespace lldb_private; using namespace clang; @@ -498,6 +500,7 @@ ( const ConstString &name, SymbolContext &sym_ctx, + uint32_t name_type_mask, SymbolContextList &sc_list ) { @@ -506,7 +509,7 @@ if (sym_ctx.module_sp) sym_ctx.module_sp->FindFunctions(name, NULL, - eFunctionNameTypeAuto, + name_type_mask, true, // include_symbols false, // include_inlines true, // append @@ -515,7 +518,7 @@ { if (sym_ctx.target_sp) sym_ctx.target_sp->GetImages().FindFunctions(name, - eFunctionNameTypeAuto, + name_type_mask, true, // include_symbols false, // include_inlines true, // append @@ -573,10 +576,33 @@ SymbolContextList sc_list; - FindCodeSymbolInContext(name, m_parser_vars->m_sym_ctx, sc_list); + FindCodeSymbolInContext(name, m_parser_vars->m_sym_ctx, eFunctionNameTypeAuto, sc_list); uint32_t sc_list_size = sc_list.GetSize(); - + + if (sc_list_size == 0) + { + SymbolContext &sc = m_parser_vars->m_sym_ctx; + if (sc.comp_unit) + { + LanguageType lang_type = sc.comp_unit->GetLanguage(); + if (Language::LanguageIsCPlusPlus(lang_type) && + CPlusPlusLanguage::IsCPPMangledName(name.AsCString())) + { + // 1. Demangle the name + Mangled mangled(name, true); + ConstString demangled = mangled.GetDemangledName(lang_type); + + if (demangled) + { + FindCodeSymbolInContext( + demangled, m_parser_vars->m_sym_ctx, eFunctionNameTypeFull, sc_list); + sc_list_size = sc_list.GetSize(); + } + } + } + } + if (sc_list_size == 0) { // We occasionally get debug information in which a const function is reported @@ -592,7 +618,8 @@ if (log) log->Printf("Failed to find symbols given non-const name %s; trying %s", name.GetCString(), fixed_name.GetCString()); - FindCodeSymbolInContext(fixed_name, m_parser_vars->m_sym_ctx, sc_list); + FindCodeSymbolInContext( + fixed_name, m_parser_vars->m_sym_ctx, eFunctionNameTypeAuto, sc_list); sc_list_size = sc_list.GetSize(); } } Index: test/expression_command/formatters/TestFormatters.py =================================================================== --- test/expression_command/formatters/TestFormatters.py +++ test/expression_command/formatters/TestFormatters.py @@ -26,7 +26,6 @@ self.do_my_test() @expectedFailureFreeBSD('llvm.org/pr19011') # Newer Clang omits C1 complete object constructor - @expectedFailureLinux('llvm.org/pr19011', ['clang']) @expectedFailureWindows("llvm.org/pr21765") @skipIfTargetAndroid() # skipping to avoid crashing the test runner @expectedFailureAndroid('llvm.org/pr24691') # we hit an assertion in clang Index: test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py =================================================================== --- test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py +++ test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py @@ -22,7 +22,6 @@ @skipIfFreeBSD # llvm.org/pr20545 bogus output confuses buildbot parser @expectedFailureWindows("llvm.org/pr24462") # Data formatters have problems on Windows @dwarf_test - @expectedFailureLinux('llvm.org/pr19011', ['clang']) def test_with_dwarf_and_run_command(self): """Test using Python synthetic children provider to provide a value.""" self.buildDwarf()