Author: Adrian Prantl Date: 2021-06-16T18:21:43-07:00 New Revision: 42e2a90684196d6ffadf785e98ea5de0876b4a3e
URL: https://github.com/llvm/llvm-project/commit/42e2a90684196d6ffadf785e98ea5de0876b4a3e DIFF: https://github.com/llvm/llvm-project/commit/42e2a90684196d6ffadf785e98ea5de0876b4a3e.diff LOG: Relax language comparison when matching up C++ forward decls with definitions when dealing with -gmodules debug info. This fixes the bot failures on Darwin. A recent clang change (presumably https://reviews.llvm.org/D104291) introduced a bug where .pcm files would identify themselves as DW_LANG_C_plus_plus, but the .o that references them would identify as DW_LANG_C_plus_plus_14. While that bug needs to be fixed, too, it shows that the current strict comparison also isn't meaningful. rdar://79423225 Added: Modified: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h Removed: ################################################################################ diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp index 45c40c1c0c9ed..6035b5714261a 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -157,7 +157,7 @@ TypeSP DWARFASTParserClang::ParseTypeFromClangModule(const SymbolContext &sc, // The type in the Clang module must have the same language as the current CU. LanguageSet languages; - languages.Insert(SymbolFileDWARF::GetLanguage(*die.GetCU())); + languages.Insert(SymbolFileDWARF::GetLanguageFamily(*die.GetCU())); llvm::DenseSet<SymbolFile *> searched_symbol_files; clang_module_sp->GetSymbolFile()->FindTypes(decl_context, languages, searched_symbol_files, pcm_types); diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 494622fdd24ee..ca02d64709e89 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -2412,7 +2412,7 @@ void SymbolFileDWARF::FindTypes( return; m_index->GetTypes(name, [&](DWARFDIE die) { - if (!languages[GetLanguage(*die.GetCU())]) + if (!languages[GetLanguageFamily(*die.GetCU())]) return true; llvm::SmallVector<CompilerContext, 4> die_context; @@ -3886,3 +3886,10 @@ LanguageType SymbolFileDWARF::LanguageTypeFromDWARF(uint64_t val) { LanguageType SymbolFileDWARF::GetLanguage(DWARFUnit &unit) { return LanguageTypeFromDWARF(unit.GetDWARFLanguageType()); } + +LanguageType SymbolFileDWARF::GetLanguageFamily(DWARFUnit &unit) { + auto lang = (llvm::dwarf::SourceLanguage)unit.GetDWARFLanguageType(); + if (llvm::dwarf::isCPlusPlus(lang)) + lang = DW_LANG_C_plus_plus; + return LanguageTypeFromDWARF(lang); +} diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h index 85dc383e22681..d9feeef549edf 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -317,6 +317,8 @@ class SymbolFileDWARF : public lldb_private::SymbolFile, static lldb::LanguageType LanguageTypeFromDWARF(uint64_t val); static lldb::LanguageType GetLanguage(DWARFUnit &unit); + /// Same as GetLanguage() but reports all C++ versions as C++ (no version). + static lldb::LanguageType GetLanguageFamily(DWARFUnit &unit); protected: typedef llvm::DenseMap<const DWARFDebugInfoEntry *, lldb_private::Type *> _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits