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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits