Do not get confused by multiple empty lexical scopes inlined at one location.

llvm-svn: 135232
This commit is contained in:
Devang Patel 2011-07-15 00:30:39 +00:00
parent c41d4fe243
commit 001c4f3ff0
1 changed files with 13 additions and 5 deletions

View File

@ -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));