r247319 - Add a getDeclContextDescriptor() helper function to CGDebugInfo. (NFC)

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 10 18:36:19 PDT 2015


On Thu, Sep 10, 2015 at 11:39 AM, Adrian Prantl via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: adrian
> Date: Thu Sep 10 13:39:45 2015
> New Revision: 247319
>
> URL: http://llvm.org/viewvc/llvm-project?rev=247319&view=rev
> Log:
> Add a getDeclContextDescriptor() helper function to CGDebugInfo. (NFC)
>

I might've found this easier to review with a more detailed description (&
possibly splitting the patch in two) - mentioning that this is the same as
getContextDescriptor, but accesses the DeclContext first and updating all
the callers that did this explicitly to use the utility. Second patch to
add the extra functionality of being able to specify a default other than
"TheCU".

All good though,

- Dave


>
> 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=247319&r1=247318&r2=247319&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Thu Sep 10 13:39:45 2015
> @@ -147,9 +147,14 @@ void CGDebugInfo::setLocation(SourceLoca
>    }
>  }
>
> -llvm::DIScope *CGDebugInfo::getContextDescriptor(const Decl *Context) {
> +llvm::DIScope *CGDebugInfo::getDeclContextDescriptor(const Decl *D) {
> +  return getContextDescriptor(cast<Decl>(D->getDeclContext()), TheCU);
> +}
> +
> +llvm::DIScope *CGDebugInfo::getContextDescriptor(const Decl *Context,
> +                                                 llvm::DIScope *Default) {
>    if (!Context)
> -    return TheCU;
> +    return Default;
>
>    auto I = RegionMap.find(Context);
>    if (I != RegionMap.end()) {
> @@ -165,7 +170,7 @@ llvm::DIScope *CGDebugInfo::getContextDe
>      if (!RDecl->isDependentType())
>        return getOrCreateType(CGM.getContext().getTypeDeclType(RDecl),
>                               getOrCreateMainFile());
> -  return TheCU;
> +  return Default;
>  }
>
>  StringRef CGDebugInfo::getFunctionName(const FunctionDecl *FD) {
> @@ -770,7 +775,7 @@ llvm::DIType *CGDebugInfo::CreateType(co
>    SourceLocation Loc = AliasDecl->getLocation();
>    return DBuilder.createTypedef(
>        Src, internString(OS.str()), getOrCreateFile(Loc),
> getLineNumber(Loc),
> -      getContextDescriptor(cast<Decl>(AliasDecl->getDeclContext())));
> +      getDeclContextDescriptor(AliasDecl));
>  }
>
>  llvm::DIType *CGDebugInfo::CreateType(const TypedefType *Ty,
> @@ -783,7 +788,7 @@ llvm::DIType *CGDebugInfo::CreateType(co
>    return DBuilder.createTypedef(
>        getOrCreateType(Ty->getDecl()->getUnderlyingType(), Unit),
>        Ty->getDecl()->getName(), getOrCreateFile(Loc), getLineNumber(Loc),
> -      getContextDescriptor(cast<Decl>(Ty->getDecl()->getDeclContext())));
> +      getDeclContextDescriptor(Ty->getDecl()));
>  }
>
>  llvm::DIType *CGDebugInfo::CreateType(const FunctionType *Ty,
> @@ -1510,8 +1515,7 @@ llvm::DIType *CGDebugInfo::CreateType(co
>    llvm::DIType *T = cast_or_null<llvm::DIType>(getTypeOrNull(QualType(Ty,
> 0)));
>    if (T || shouldOmitDefinition(DebugKind, RD, CGM.getLangOpts())) {
>      if (!T)
> -      T = getOrCreateRecordFwdDecl(
> -          Ty, getContextDescriptor(cast<Decl>(RD->getDeclContext())));
> +      T = getOrCreateRecordFwdDecl(Ty, getDeclContextDescriptor(RD));
>      return T;
>    }
>
> @@ -1939,8 +1943,7 @@ llvm::DIType *CGDebugInfo::CreateEnumTyp
>    // If this is just a forward declaration, construct an appropriately
>    // marked node and just return it.
>    if (!ED->getDefinition()) {
> -    llvm::DIScope *EDContext =
> -        getContextDescriptor(cast<Decl>(ED->getDeclContext()));
> +    llvm::DIScope *EDContext = getDeclContextDescriptor(ED);
>      llvm::DIFile *DefUnit = getOrCreateFile(ED->getLocation());
>      unsigned Line = getLineNumber(ED->getLocation());
>      StringRef EDName = ED->getName();
> @@ -1980,8 +1983,7 @@ llvm::DIType *CGDebugInfo::CreateTypeDef
>
>    llvm::DIFile *DefUnit = getOrCreateFile(ED->getLocation());
>    unsigned Line = getLineNumber(ED->getLocation());
> -  llvm::DIScope *EnumContext =
> -      getContextDescriptor(cast<Decl>(ED->getDeclContext()));
> +  llvm::DIScope *EnumContext = getDeclContextDescriptor(ED);
>    llvm::DIType *ClassTy =
>        ED->isFixed() ? getOrCreateType(ED->getIntegerType(), DefUnit) :
> nullptr;
>    return DBuilder.createEnumerationType(EnumContext, ED->getName(),
> DefUnit,
> @@ -2228,8 +2230,7 @@ llvm::DICompositeType *CGDebugInfo::Crea
>    unsigned Line = getLineNumber(RD->getLocation());
>    StringRef RDName = getClassName(RD);
>
> -  llvm::DIScope *RDContext =
> -      getContextDescriptor(cast<Decl>(RD->getDeclContext()));
> +  llvm::DIScope *RDContext = getDeclContextDescriptor(RD);
>
>    // If we ended up creating the type during the context chain
> construction,
>    // just return that.
> @@ -2326,7 +2327,7 @@ void CGDebugInfo::collectFunctionDeclPro
>        FDContext = getOrCreateNameSpace(NSDecl);
>      else if (const RecordDecl *RDecl =
>               dyn_cast_or_null<RecordDecl>(FD->getDeclContext()))
> -      FDContext = getContextDescriptor(cast<Decl>(RDecl));
> +      FDContext = getContextDescriptor(RDecl, TheCU);
>      // Collect template parameters.
>      TParamsArray = CollectFunctionTemplateParams(FD, Unit);
>    }
> @@ -2374,7 +2375,7 @@ void CGDebugInfo::collectVarDeclProps(co
>    // outside the class by putting it in the global scope.
>    if (DC->isRecord())
>      DC = CGM.getContext().getTranslationUnitDecl();
> -  VDContext = getContextDescriptor(dyn_cast<Decl>(DC));
> +  VDContext = getContextDescriptor(cast<Decl>(DC), TheCU);
>  }
>
>  llvm::DISubprogram *
> @@ -2460,7 +2461,7 @@ llvm::DISubprogram *CGDebugInfo::getFunc
>      return nullptr;
>
>    // Setup context.
> -  auto *S = getContextDescriptor(cast<Decl>(D->getDeclContext()));
> +  auto *S = getDeclContextDescriptor(D);
>
>    auto MI = SPCache.find(FD->getCanonicalDecl());
>    if (MI == SPCache.end()) {
> @@ -3050,7 +3051,7 @@ void CGDebugInfo::EmitDeclareOfBlockLite
>    unsigned column = getColumnNumber(loc);
>
>    // Build the debug-info type for the block literal.
> -  getContextDescriptor(cast<Decl>(blockDecl->getDeclContext()));
> +  getDeclContextDescriptor(blockDecl);
>
>    const llvm::StructLayout *blockLayout =
>        CGM.getDataLayout().getStructLayout(block.StructureType);
> @@ -3194,8 +3195,7 @@ CGDebugInfo::getOrCreateStaticDataMember
>    // If the member wasn't found in the cache, lazily construct and add it
> to the
>    // type (used when a limited form of the type is emitted).
>    auto DC = D->getDeclContext();
> -  auto *Ctxt =
> -      cast<llvm::DICompositeType>(getContextDescriptor(cast<Decl>(DC)));
> +  auto *Ctxt = cast<llvm::DICompositeType>(getDeclContextDescriptor(D));
>    return CreateRecordStaticField(D, Ctxt, cast<RecordDecl>(DC));
>  }
>
> @@ -3280,15 +3280,14 @@ void CGDebugInfo::EmitGlobalVariable(con
>    auto *VarD = cast<VarDecl>(VD);
>    if (VarD->isStaticDataMember()) {
>      auto *RD = cast<RecordDecl>(VarD->getDeclContext());
> -    getContextDescriptor(RD);
> +    getDeclContextDescriptor(VarD);
>      // Ensure that the type is retained even though it's otherwise
> unreferenced.
>      RetainedTypes.push_back(
>          CGM.getContext().getRecordType(RD).getAsOpaquePtr());
>      return;
>    }
>
> -  llvm::DIScope *DContext =
> -      getContextDescriptor(dyn_cast<Decl>(VD->getDeclContext()));
> +  llvm::DIScope *DContext = getDeclContextDescriptor(VD);
>
>    auto &GV = DeclCache[VD];
>    if (GV)
> @@ -3301,7 +3300,7 @@ void CGDebugInfo::EmitGlobalVariable(con
>  llvm::DIScope *CGDebugInfo::getCurrentContextDescriptor(const Decl *D) {
>    if (!LexicalBlockStack.empty())
>      return LexicalBlockStack.back();
> -  return getContextDescriptor(D);
> +  return getContextDescriptor(D, TheCU);
>  }
>
>  void CGDebugInfo::EmitUsingDirective(const UsingDirectiveDecl &UD) {
> @@ -3370,8 +3369,7 @@ CGDebugInfo::getOrCreateNameSpace(const
>
>    unsigned LineNo = getLineNumber(NSDecl->getLocation());
>    llvm::DIFile *FileD = getOrCreateFile(NSDecl->getLocation());
> -  llvm::DIScope *Context =
> -      getContextDescriptor(dyn_cast<Decl>(NSDecl->getDeclContext()));
> +  llvm::DIScope *Context = getDeclContextDescriptor(NSDecl);
>    llvm::DINamespace *NS =
>        DBuilder.createNameSpace(Context, NSDecl->getName(), FileD, LineNo);
>    NameSpaceCache[NSDecl].reset(NS);
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=247319&r1=247318&r2=247319&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Thu Sep 10 13:39:45 2015
> @@ -366,8 +366,11 @@ private:
>    llvm::DIType *EmitTypeForVarWithBlocksAttr(const VarDecl *VD,
>                                               uint64_t *OffSet);
>
> -  /// Get context info for the decl.
> -  llvm::DIScope *getContextDescriptor(const Decl *Decl);
> +  /// Get context info for the DeclContext of \p Decl.
> +  llvm::DIScope *getDeclContextDescriptor(const Decl *D);
> +  /// Get context info for a given DeclContext \p Decl.
> +  llvm::DIScope *getContextDescriptor(const Decl *Context,
> +                                      llvm::DIScope *Default);
>
>    llvm::DIScope *getCurrentContextDescriptor(const Decl *Decl);
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150910/4d3ce452/attachment.html>


More information about the cfe-commits mailing list