Skip to content

Commit

Permalink
Fix caching for clang::Decl in DWARFASTParserClang
Browse files Browse the repository at this point in the history
Reviewers: sivachandra, chaoren, clayborg, tberghammer

Subscribers: lldb-commits

Differential Revision: http://reviews.llvm.org/D12942

llvm-svn: 247923
  • Loading branch information
paulherman committed Sep 17, 2015
1 parent 5493e31 commit f6681b4
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
Expand Up @@ -3225,13 +3225,31 @@ DWARFASTParserClang::GetClangDeclForDIE (const DWARFDIE &die)
if (!die)
return nullptr;

if (die.GetReferencedDIE(DW_AT_specification))
return GetClangDeclForDIE(die.GetReferencedDIE(DW_AT_specification));
switch (die.Tag())
{
case DW_TAG_variable:
case DW_TAG_constant:
case DW_TAG_formal_parameter:
case DW_TAG_imported_declaration:
case DW_TAG_imported_module:
break;
default:
return nullptr;
}

clang::Decl *decl = m_die_to_decl[die.GetDIE()];
if (decl != nullptr)
DIEToDeclMap::iterator cache_pos = m_die_to_decl.find(die.GetDIE());
if (cache_pos != m_die_to_decl.end())
return cache_pos->second;

if (DWARFDIE spec_die = die.GetReferencedDIE(DW_AT_specification))
{
clang::Decl *decl = GetClangDeclForDIE(spec_die);
m_die_to_decl[die.GetDIE()] = decl;
m_decl_to_die[decl].insert(die.GetDIE());
return decl;
}

clang::Decl *decl = nullptr;
switch (die.Tag())
{
case DW_TAG_variable:
Expand Down

0 comments on commit f6681b4

Please sign in to comment.