From 16710b289b9155711b490a75e44f0d324f5b9e72 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Tue, 31 Mar 2015 00:10:37 +0000 Subject: [PATCH] DebugInfo: Remove LexicalBlockFile scope/context distinction Two things here: 1. I read `getScope()` and `getContext()` backwards in r233640. There was no need for `getScopeOfScope()`. Obviously not enough test coverage here (as I said in that commit, I'm going to come back to that), but anyway I'm reverting to the behaviour before r233640. 2. The callers that use `DILexicalBlockFile::getContext()` don't seem to care about the difference. Just have it redirect to `getScope()` so I can't get confused again. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233650 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/DebugInfo.h | 8 +------- lib/CodeGen/LexicalScopes.cpp | 15 +++------------ 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/include/llvm/IR/DebugInfo.h b/include/llvm/IR/DebugInfo.h index 4aca3455c05..c8c55d2d307 100644 --- a/include/llvm/IR/DebugInfo.h +++ b/include/llvm/IR/DebugInfo.h @@ -908,13 +908,7 @@ public: return *get(); } - DIScope getContext() const { - // FIXME: This logic is horrible. getScope() returns a DILexicalBlock, but - // then we check if it's a subprogram? WHAT?!? - if (getScope().isSubprogram()) - return getScope(); - return getScope().getContext(); - } + DIScope getContext() const { return getScope(); } unsigned getLineNumber() const { return getScope().getLineNumber(); } unsigned getColumnNumber() const { return getScope().getColumnNumber(); } DILexicalBlock getScope() const { diff --git a/lib/CodeGen/LexicalScopes.cpp b/lib/CodeGen/LexicalScopes.cpp index fc12b8ff3ff..3e978361481 100644 --- a/lib/CodeGen/LexicalScopes.cpp +++ b/lib/CodeGen/LexicalScopes.cpp @@ -104,15 +104,6 @@ void LexicalScopes::extractLexicalScopes( } } -static MDLocalScope *getScopeOfScope(const MDLexicalBlockFile *File) { - // FIXME: Why double-walk the scope list? Are these just being encoded - // awkwardly? - auto *Scope = File->getScope(); - if (auto *Block = dyn_cast(Scope)) - return Block->getScope(); - return Scope; -} - /// findLexicalScope - Find lexical scope, either regular or inlined, for the /// given DebugLoc. Return NULL if not found. LexicalScope *LexicalScopes::findLexicalScope(const MDLocation *DL) { @@ -123,7 +114,7 @@ LexicalScope *LexicalScopes::findLexicalScope(const MDLocation *DL) { // The scope that we were created with could have an extra file - which // isn't what we care about in this case. if (auto *File = dyn_cast(Scope)) - Scope = getScopeOfScope(File); + Scope = File->getScope(); if (auto *IA = DL->getInlinedAt()) { auto I = InlinedLexicalScopeMap.find(std::make_pair(Scope, IA)); @@ -150,7 +141,7 @@ LexicalScope *LexicalScopes::getOrCreateLexicalScope(const MDLocalScope *Scope, LexicalScope * LexicalScopes::getOrCreateRegularScope(const MDLocalScope *Scope) { if (auto *File = dyn_cast(Scope)) - Scope = getScopeOfScope(File); + Scope = File->getScope(); auto I = LexicalScopeMap.find(Scope); if (I != LexicalScopeMap.end()) @@ -204,7 +195,7 @@ LexicalScopes::getOrCreateAbstractScope(const MDLocalScope *Scope) { assert(Scope && "Invalid Scope encoding!"); if (auto *File = dyn_cast(Scope)) - Scope = getScopeOfScope(File); + Scope = File->getScope(); auto I = AbstractScopeMap.find(Scope); if (I != AbstractScopeMap.end()) return &I->second; -- 2.34.1