paulherman created this revision. paulherman added reviewers: sivachandra, chaoren, tberghammer, clayborg. paulherman added a subscriber: lldb-commits.
http://reviews.llvm.org/D12942 Files: source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp Index: source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -3225,13 +3225,19 @@ if (!die) return nullptr; - if (die.GetReferencedDIE(DW_AT_specification)) - return GetClangDeclForDIE(die.GetReferencedDIE(DW_AT_specification)); + DIEToDeclMap::iterator cache_pos = m_die_to_decl.find(die.GetDIE()); + if (cache_pos != m_die_to_decl.end()) + return cache_pos->second; - clang::Decl *decl = m_die_to_decl[die.GetDIE()]; - if (decl != nullptr) + if (die.GetReferencedDIE(DW_AT_specification)) + { + clang::Decl *decl = GetClangDeclForDIE(die.GetReferencedDIE(DW_AT_specification)); + m_die_to_decl[die.GetDIE()] = decl; + m_decl_to_die[decl].insert(die.GetDIE()); return decl; + } + clang::Decl *decl = m_die_to_decl[die.GetDIE()]; switch (die.Tag()) { case DW_TAG_variable:
Index: source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -3225,13 +3225,19 @@ if (!die) return nullptr; - if (die.GetReferencedDIE(DW_AT_specification)) - return GetClangDeclForDIE(die.GetReferencedDIE(DW_AT_specification)); + DIEToDeclMap::iterator cache_pos = m_die_to_decl.find(die.GetDIE()); + if (cache_pos != m_die_to_decl.end()) + return cache_pos->second; - clang::Decl *decl = m_die_to_decl[die.GetDIE()]; - if (decl != nullptr) + if (die.GetReferencedDIE(DW_AT_specification)) + { + clang::Decl *decl = GetClangDeclForDIE(die.GetReferencedDIE(DW_AT_specification)); + m_die_to_decl[die.GetDIE()] = decl; + m_decl_to_die[decl].insert(die.GetDIE()); return decl; + } + clang::Decl *decl = m_die_to_decl[die.GetDIE()]; switch (die.Tag()) { case DW_TAG_variable:
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits