diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 03fb8d1fa310..b7fc41b77b74 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1587,18 +1587,22 @@ DbgScope *DwarfDebug::getOrCreateDbgScope(DebugLoc DL) { } getOrCreateAbstractScope(Scope); - DbgScope *WScope = DbgScopeMap.lookup(InlinedAt); + DbgScope *WScope = NULL; + const MDNode *Key = InlinedAt; + if (const MDNode *Nest = DILocation(InlinedAt).getOrigLocation()) + Key = Nest; + WScope = DbgScopeMap.lookup(Key); if (WScope) return WScope; WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt); - DbgScopeMap.insert(std::make_pair(InlinedAt, WScope)); + DbgScopeMap[Key] = WScope; DbgScope *Parent = getOrCreateDbgScope(DebugLoc::getFromDILocation(InlinedAt)); WScope->setParent(Parent); Parent->addScope(WScope); - ConcreteScopes[InlinedAt] = WScope; + ConcreteScopes[Key] = WScope; return WScope; } @@ -2083,8 +2087,12 @@ DbgScope *DwarfDebug::findDbgScope(DebugLoc DL) { DbgScope *Scope = NULL; LLVMContext &Ctx = Asm->MF->getFunction()->getContext(); - if (const MDNode *IA = DL.getInlinedAt(Ctx)) - Scope = ConcreteScopes.lookup(IA); + if (const MDNode *IA = DL.getInlinedAt(Ctx)) { + const MDNode *Key = IA; + if (const MDNode *Nest = DILocation(IA).getOrigLocation()) + Key = Nest; + Scope = ConcreteScopes.lookup(Key); + } if (Scope == 0) Scope = DbgScopeMap.lookup(DL.getScope(Ctx));