diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h | 4 | 
2 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index c5efd99969a..125e1e86b12 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1593,6 +1593,7 @@ DbgScope *DwarfDebug::getOrCreateDbgScope(DebugLoc DL) {    WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);    DbgScopeMap.insert(std::make_pair(InlinedAt, WScope)); +  InlinedDbgScopeMap[DebugLoc::getFromDILocation(InlinedAt)] = WScope;    DbgScope *Parent =      getOrCreateDbgScope(DebugLoc::getFromDILocation(InlinedAt));    WScope->setParent(Parent); @@ -2043,6 +2044,7 @@ void DwarfDebug::endFunction(const MachineFunction *MF) {    DbgVariableToFrameIndexMap.clear();    VarToAbstractVarMap.clear();    DbgVariableToDbgInstMap.clear(); +  InlinedDbgScopeMap.clear();    DeleteContainerSeconds(DbgScopeMap);    UserVariables.clear();    DbgValues.clear(); @@ -2079,10 +2081,10 @@ DbgScope *DwarfDebug::findDbgScope(DebugLoc DL) {    DbgScope *Scope = NULL;    LLVMContext &Ctx = Asm->MF->getFunction()->getContext(); -  const MDNode *N = DL.getScope(Ctx); -  if (const MDNode *IA = DL.getInlinedAt(Ctx)) -    N = IA; -  Scope = DbgScopeMap.lookup(N); +  if (MDNode *IA = DL.getInlinedAt(Ctx)) +    Scope = InlinedDbgScopeMap.lookup(DebugLoc::getFromDILocation(IA)); +  else +    Scope = DbgScopeMap.lookup(DL.getScope(Ctx));    return Scope;  } diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h index 82b319f16fe..b2450064e3d 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -201,9 +201,11 @@ class DwarfDebug {    /// DbgScopeMap - Tracks the scopes in the current function.  Owns the    /// contained DbgScope*s. -  ///    DenseMap<const MDNode *, DbgScope *> DbgScopeMap; +  /// InlinedDbgScopeMap - Tracks inlined function scopes in current function. +  DenseMap<DebugLoc, DbgScope *> InlinedDbgScopeMap; +    /// AbstractScopes - Tracks the abstract scopes a module. These scopes are    /// not included DbgScopeMap.  AbstractScopes owns its DbgScope*s.    DenseMap<const MDNode *, DbgScope *> AbstractScopes;  | 

