r188498 - DebugInfo: Split out the implementation of getStaticDataMemberDeclaration for future use

Evgeniy Stepanov eugeni.stepanov at gmail.com
Fri Aug 16 01:40:26 PDT 2013


Hi,

this broke linux cmake bootstrap build with
-DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_ASSERTIONS=ON
-DLLVM_ENABLE_WERROR=ON

Reproducer attached.

$ bin/clang -g -c 1.ii
A static data member declaration should be available at this point
UNREACHABLE executed at ../tools/clang/lib/CodeGen/CGDebugInfo.cpp:3018!


On Fri, Aug 16, 2013 at 2:30 AM, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Thu Aug 15 17:30:23 2013
> New Revision: 188498
>
> URL: http://llvm.org/viewvc/llvm-project?rev=188498&view=rev
> Log:
> DebugInfo: Split out the implementation of getStaticDataMemberDeclaration for future use
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>     cfe/trunk/lib/CodeGen/CGDebugInfo.h
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=188498&r1=188497&r2=188498&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Aug 15 17:30:23 2013
> @@ -2998,19 +2998,25 @@ void CGDebugInfo::EmitDeclareOfBlockLite
>    DbgDecl->setDebugLoc(llvm::DebugLoc::get(line, column, scope));
>  }
>
> -/// getStaticDataMemberDeclaration - If D is an out-of-class definition of
> -/// a static data member of a class, find its corresponding in-class
> -/// declaration.
> -llvm::DIDerivedType CGDebugInfo::getStaticDataMemberDeclaration(const VarDecl *D) {
> -  if (D->isStaticDataMember()) {
> -    llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator
> -      MI = StaticDataMemberCache.find(D->getCanonicalDecl());
> -    if (MI != StaticDataMemberCache.end())
> -      // Verify the info still exists.
> -      if (llvm::Value *V = MI->second)
> -        return llvm::DIDerivedType(cast<llvm::MDNode>(V));
> -  }
> -  return llvm::DIDerivedType();
> +/// If D is an out-of-class definition of a static data member of a class, find
> +/// its corresponding in-class declaration.
> +llvm::DIDerivedType
> +CGDebugInfo::getStaticDataMemberDeclarationOrNull(const VarDecl *D) {
> +  if (!D->isStaticDataMember())
> +    return llvm::DIDerivedType();
> +  return getStaticDataMemberDeclaration(D);
> +}
> +
> +llvm::DIDerivedType
> +CGDebugInfo::getStaticDataMemberDeclaration(const VarDecl *D) {
> +  llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator
> +    MI = StaticDataMemberCache.find(D->getCanonicalDecl());
> +  if (MI != StaticDataMemberCache.end())
> +    // Verify the info still exists.
> +    if (llvm::Value *V = MI->second)
> +      return llvm::DIDerivedType(cast<llvm::MDNode>(V));
> +  llvm_unreachable(
> +      "A static data member declaration should be available at this point");
>  }
>
>  /// EmitGlobalVariable - Emit information about a global variable.
> @@ -3042,11 +3048,9 @@ void CGDebugInfo::EmitGlobalVariable(llv
>      LinkageName = StringRef();
>    llvm::DIDescriptor DContext =
>      getContextDescriptor(dyn_cast<Decl>(D->getDeclContext()));
> -  llvm::DIGlobalVariable GV =
> -      DBuilder.createStaticVariable(DContext, DeclName, LinkageName, Unit,
> -                                    LineNo, getOrCreateType(T, Unit),
> -                                    Var->hasInternalLinkage(), Var,
> -                                    getStaticDataMemberDeclaration(D));
> +  llvm::DIGlobalVariable GV = DBuilder.createStaticVariable(
> +      DContext, DeclName, LinkageName, Unit, LineNo, getOrCreateType(T, Unit),
> +      Var->hasInternalLinkage(), Var, getStaticDataMemberDeclarationOrNull(D));
>    DeclCache.insert(std::make_pair(D->getCanonicalDecl(), llvm::WeakVH(GV)));
>  }
>
> @@ -3094,7 +3098,7 @@ void CGDebugInfo::EmitGlobalVariable(con
>      return;
>    llvm::DIGlobalVariable GV = DBuilder.createStaticVariable(
>        Unit, Name, Name, Unit, getLineNumber(VD->getLocation()), Ty, true, Init,
> -      getStaticDataMemberDeclaration(cast<VarDecl>(VD)));
> +      getStaticDataMemberDeclarationOrNull(cast<VarDecl>(VD)));
>    DeclCache.insert(std::make_pair(VD->getCanonicalDecl(), llvm::WeakVH(GV)));
>  }
>
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=188498&r1=188497&r2=188498&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Thu Aug 15 17:30:23 2013
> @@ -357,6 +357,7 @@ private:
>    /// getStaticDataMemberDeclaration - Return debug info descriptor to
>    /// describe in-class static data member declaration for the given
>    /// out-of-class definition.
> +  llvm::DIDerivedType getStaticDataMemberDeclarationOrNull(const VarDecl *D);
>    llvm::DIDerivedType getStaticDataMemberDeclaration(const VarDecl *D);
>
>    /// getFunctionName - Get function name for the given FunctionDecl. If the
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 1.ii
Type: application/octet-stream
Size: 202 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130816/c55d55f6/attachment.obj>


More information about the cfe-commits mailing list