mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 22:24:54 +00:00
Revert "DebugInfo: Include lexical scopes in inlined subroutines."
This reverts commit r208506. Some inlined subroutine scopes appear to be missing with this change. Reverting while I investigate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208642 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -623,7 +623,7 @@ std::unique_ptr<DIE> DwarfDebug::constructScopeDIE(DwarfCompileUnit &TheCU,
|
||||
// avoid creating un-used children then removing them later when we find out
|
||||
// the scope DIE is null.
|
||||
std::unique_ptr<DIE> ScopeDIE;
|
||||
if (DS.getContext() && DS.isSubprogram()) {
|
||||
if (Scope->getInlinedAt()) {
|
||||
ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
|
||||
if (!ScopeDIE)
|
||||
return nullptr;
|
||||
@@ -1210,12 +1210,10 @@ DwarfDebug::collectVariableInfo(SmallPtrSet<const MDNode *, 16> &Processed) {
|
||||
if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
|
||||
DISubprogram(DV.getContext()).describes(CurFn->getFunction()))
|
||||
Scope = LScopes.getCurrentFunctionScope();
|
||||
else if (MDNode *IA = DV.getInlinedAt()) {
|
||||
DebugLoc DL = DebugLoc::getFromDILocation(IA);
|
||||
Scope = LScopes.findInlinedScope(DebugLoc::get(
|
||||
DL.getLine(), DL.getCol(), DV.getContext(), IA));
|
||||
} else
|
||||
Scope = LScopes.findLexicalScope(DV.getContext());
|
||||
else if (MDNode *IA = DV.getInlinedAt())
|
||||
Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
|
||||
else
|
||||
Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
|
||||
// If variable scope is not found then skip this variable.
|
||||
if (!Scope)
|
||||
continue;
|
||||
|
@@ -104,14 +104,6 @@ void LexicalScopes::extractLexicalScopes(
|
||||
}
|
||||
}
|
||||
|
||||
LexicalScope *LexicalScopes::findInlinedScope(DebugLoc DL) {
|
||||
MDNode *Scope = nullptr;
|
||||
MDNode *IA = nullptr;
|
||||
DL.getScopeAndInlinedAt(Scope, IA, MF->getFunction()->getContext());
|
||||
auto I = InlinedLexicalScopeMap.find(std::make_pair(Scope, IA));
|
||||
return I != InlinedLexicalScopeMap.end() ? &I->second : nullptr;
|
||||
}
|
||||
|
||||
/// findLexicalScope - Find lexical scope, either regular or inlined, for the
|
||||
/// given DebugLoc. Return NULL if not found.
|
||||
LexicalScope *LexicalScopes::findLexicalScope(DebugLoc DL) {
|
||||
@@ -127,10 +119,8 @@ LexicalScope *LexicalScopes::findLexicalScope(DebugLoc DL) {
|
||||
if (D.isLexicalBlockFile())
|
||||
Scope = DILexicalBlockFile(Scope).getScope();
|
||||
|
||||
if (IA) {
|
||||
auto I = InlinedLexicalScopeMap.find(std::make_pair(Scope, IA));
|
||||
return I != InlinedLexicalScopeMap.end() ? &I->second : nullptr;
|
||||
}
|
||||
if (IA)
|
||||
return InlinedLexicalScopeMap.lookup(DebugLoc::getFromDILocation(IA));
|
||||
return findLexicalScope(Scope);
|
||||
}
|
||||
|
||||
@@ -180,27 +170,21 @@ LexicalScope *LexicalScopes::getOrCreateRegularScope(MDNode *Scope) {
|
||||
}
|
||||
|
||||
/// getOrCreateInlinedScope - Find or create an inlined lexical scope.
|
||||
LexicalScope *LexicalScopes::getOrCreateInlinedScope(MDNode *ScopeNode,
|
||||
LexicalScope *LexicalScopes::getOrCreateInlinedScope(MDNode *Scope,
|
||||
MDNode *InlinedAt) {
|
||||
std::pair<const MDNode*, const MDNode*> P(ScopeNode, InlinedAt);
|
||||
auto I = InlinedLexicalScopeMap.find(P);
|
||||
if (I != InlinedLexicalScopeMap.end())
|
||||
auto I = LexicalScopeMap.find(InlinedAt);
|
||||
if (I != LexicalScopeMap.end())
|
||||
return &I->second;
|
||||
|
||||
LexicalScope *Parent;
|
||||
DILexicalBlock Scope(ScopeNode);
|
||||
if (Scope.isLexicalBlock()) {
|
||||
DILexicalBlock PB(Scope.getContext());
|
||||
Parent = getOrCreateInlinedScope(PB, InlinedAt);
|
||||
} else
|
||||
Parent = getOrCreateLexicalScope(DebugLoc::getFromDILocation(InlinedAt));
|
||||
|
||||
DebugLoc InlinedLoc = DebugLoc::getFromDILocation(InlinedAt);
|
||||
// FIXME: Use forward_as_tuple instead of make_tuple, once MSVC2012
|
||||
// compatibility is no longer required.
|
||||
I = InlinedLexicalScopeMap.emplace(std::piecewise_construct,
|
||||
std::make_tuple(P),
|
||||
std::make_tuple(Parent, Scope, InlinedAt,
|
||||
false)).first;
|
||||
I = LexicalScopeMap.emplace(
|
||||
std::piecewise_construct, std::make_tuple(InlinedAt),
|
||||
std::make_tuple(getOrCreateLexicalScope(InlinedLoc),
|
||||
DIDescriptor(Scope), InlinedAt,
|
||||
false)).first;
|
||||
InlinedLexicalScopeMap[InlinedLoc] = &I->second;
|
||||
return &I->second;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user