[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