From 88f50087c8aa28f38b9bf86206d529b7cdc9b612 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. llvm-svn: 233650 --- llvm/include/llvm/IR/DebugInfo.h | 8 +------- llvm/lib/CodeGen/LexicalScopes.cpp | 15 +++------------ 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/llvm/include/llvm/IR/DebugInfo.h b/llvm/include/llvm/IR/DebugInfo.h index 4aca3455c057..c8c55d2d3073 100644 --- a/llvm/include/llvm/IR/DebugInfo.h +++ b/llvm/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/llvm/lib/CodeGen/LexicalScopes.cpp b/llvm/lib/CodeGen/LexicalScopes.cpp index fc12b8ff3ffa..3e978361481b 100644 --- a/llvm/lib/CodeGen/LexicalScopes.cpp +++ b/llvm/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;