[llvm] r219693 - Fix stuff... again.
David Blaikie
dblaikie at gmail.com
Tue Oct 14 10:26:03 PDT 2014
On Tue, Oct 14, 2014 at 10:11 AM, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Tue Oct 14 12:11:59 2014
> New Revision: 219693
>
> URL: http://llvm.org/viewvc/llvm-project?rev=219693&view=rev
> Log:
> Fix stuff... again.
>
Sorry about the commit message - reverted. (though should be recommitted
soon with a real commit message once I've done some more testing after the
recent fix in Clang)
>
> Modified:
> llvm/trunk/lib/CodeGen/LexicalScopes.cpp
> llvm/trunk/lib/IR/DebugInfo.cpp
>
> Modified: llvm/trunk/lib/CodeGen/LexicalScopes.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LexicalScopes.cpp?rev=219693&r1=219692&r2=219693&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/LexicalScopes.cpp (original)
> +++ llvm/trunk/lib/CodeGen/LexicalScopes.cpp Tue Oct 14 12:11:59 2014
> @@ -137,6 +137,8 @@ LexicalScope *LexicalScopes::findLexical
> /// getOrCreateLexicalScope - Find lexical scope for the given DebugLoc.
> If
> /// not available then create new lexical scope.
> LexicalScope *LexicalScopes::getOrCreateLexicalScope(DebugLoc DL) {
> + if (DL.isUnknown())
> + return nullptr;
> MDNode *Scope = nullptr;
> MDNode *InlinedAt = nullptr;
> DL.getScopeAndInlinedAt(Scope, InlinedAt,
> MF->getFunction()->getContext());
> @@ -172,9 +174,12 @@ LexicalScope *LexicalScopes::getOrCreate
> std::make_tuple(Parent, DIDescriptor(Scope),
> nullptr, false)).first;
>
> - if (!Parent && DIDescriptor(Scope).isSubprogram() &&
> - DISubprogram(Scope).describes(MF->getFunction()))
> + if (!Parent) {
> + assert(DIDescriptor(Scope).isSubprogram());
> + assert(DISubprogram(Scope).describes(MF->getFunction()));
> + assert(!CurrentFnLexicalScope);
> CurrentFnLexicalScope = &I->second;
> + }
>
> return &I->second;
> }
>
> Modified: llvm/trunk/lib/IR/DebugInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=219693&r1=219692&r2=219693&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/DebugInfo.cpp (original)
> +++ llvm/trunk/lib/IR/DebugInfo.cpp Tue Oct 14 12:11:59 2014
> @@ -568,6 +568,34 @@ bool DISubprogram::Verify() const {
> if (isLValueReference() && isRValueReference())
> return false;
>
> + // If a DISubprogram has an llvm::Function*, then scope chains from all
> + // instructions within the function should lead to this DISubprogram.
> + if (auto *F = getFunction()) {
> + LLVMContext &Ctxt = F->getContext();
> + for (auto &BB : *F) {
> + for (auto &I : BB) {
> + DebugLoc DL = I.getDebugLoc();
> + if (DL.isUnknown())
> + continue;
> +
> + MDNode *Scope = nullptr;
> + MDNode *IA = nullptr;
> + // walk the inlined-at scopes
> + while (DL.getScopeAndInlinedAt(Scope, IA, F->getContext()), IA)
> + DL = DebugLoc::getFromDILocation(IA);
> + DL.getScopeAndInlinedAt(Scope, IA, Ctxt);
> + assert(!IA);
> + while (!DIDescriptor(Scope).isSubprogram()) {
> + DILexicalBlockFile D(Scope);
> + Scope = D.isLexicalBlockFile()
> + ? D.getScope()
> + :
> DebugLoc::getFromDILexicalBlock(Scope).getScope(Ctxt);
> + }
> + if (!DISubprogram(Scope).describes(F))
> + return false;
> + }
> + }
> + }
> return DbgNode->getNumOperands() == 9 && getNumHeaderFields() == 12;
> }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141014/d563e1fe/attachment.html>
More information about the llvm-commits
mailing list