diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 3c140f9f94e0e..4ccbcae3e093d 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -104,7 +104,9 @@ CPlusPlusLanguage::GetFunctionNameInfo(ConstString name) const { bool CPlusPlusLanguage::SymbolNameFitsToLanguage(Mangled mangled) const { const char *mangled_name = mangled.GetMangledName().GetCString(); - return mangled_name && Mangled::IsMangledName(mangled_name); + auto mangling_scheme = Mangled::GetManglingScheme(mangled_name); + return mangled_name && (mangling_scheme == Mangled::eManglingSchemeItanium || + mangling_scheme == Mangled::eManglingSchemeMSVC); } ConstString CPlusPlusLanguage::GetDemangledFunctionNameWithoutArguments( diff --git a/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp b/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp index 99018c129c5cd..f96e7896cc023 100644 --- a/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp +++ b/lldb/unittests/Language/CPlusPlus/CPlusPlusLanguageTest.cpp @@ -397,3 +397,33 @@ TEST(CPlusPlusLanguage, CPlusPlusNameParser) { // Don't crash. CPlusPlusNameParser((const char *)nullptr); } + +TEST(CPlusPlusLanguage, DoesNotMatchCxx) { + // Test that a symbol name that is NOT C++ does not match C++. + + SubsystemRAII lang; + Language *CPlusPlusLang = + Language::FindPlugin(lldb::eLanguageTypeC_plus_plus); + + EXPECT_TRUE(CPlusPlusLang != nullptr); + + Mangled swiftSymbol("$sS"); + EXPECT_FALSE(CPlusPlusLang->SymbolNameFitsToLanguage(swiftSymbol)); +} + +TEST(CPlusPlusLanguage, MatchesCxx) { + // Test that a symbol name that is C++ does match C++ (both Itanium and MSVC). + + SubsystemRAII lang; + Language *CPlusPlusLang = + Language::FindPlugin(lldb::eLanguageTypeC_plus_plus); + + EXPECT_TRUE(CPlusPlusLang != nullptr); + + Mangled itaniumSymbol("_Z3Foo"); + EXPECT_TRUE(CPlusPlusLang->SymbolNameFitsToLanguage(itaniumSymbol)); + Mangled itaniumExtensionSymbol("___Z3Bar_block_invoke"); + EXPECT_TRUE(CPlusPlusLang->SymbolNameFitsToLanguage(itaniumExtensionSymbol)); + Mangled msvcSymbol("??x@@3AH"); + EXPECT_TRUE(CPlusPlusLang->SymbolNameFitsToLanguage(msvcSymbol)); +}