From 001c4f3ff02ca06dddbce13ca44ca36e6046bf81 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Fri, 15 Jul 2011 00:30:39 +0000 Subject: Do not get confused by multiple empty lexical scopes inlined at one location. llvm-svn: 135232 --- llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'llvm/lib') diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 03fb8d1fa31..b7fc41b77b7 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)); -- cgit v1.2.3