clang  15.0.0git
Functions
SemaTemplateInstantiateDecl.cpp File Reference
#include "TreeTransform.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTMutationListener.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/DeclVisitor.h"
#include "clang/AST/DependentDiagnostic.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/PrettyDeclStackTrace.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/Template.h"
#include "clang/Sema/TemplateInstCallback.h"
#include "llvm/Support/TimeProfiler.h"
#include "clang/Sema/AttrTemplateInstantiate.inc"
Include dependency graph for SemaTemplateInstantiateDecl.cpp:

Go to the source code of this file.

Functions

static bool isDeclWithinFunction (const Decl *D)
 
template<typename DeclT >
static bool SubstQualifier (Sema &SemaRef, const DeclT *OldDecl, DeclT *NewDecl, const MultiLevelTemplateArgumentList &TemplateArgs)
 
static void instantiateDependentAlignedAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AlignedAttr *Aligned, Decl *New, bool IsPackExpansion)
 
static void instantiateDependentAlignedAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AlignedAttr *Aligned, Decl *New)
 
static void instantiateDependentAssumeAlignedAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AssumeAlignedAttr *Aligned, Decl *New)
 
static void instantiateDependentAlignValueAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AlignValueAttr *Aligned, Decl *New)
 
static void instantiateDependentAllocAlignAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AllocAlignAttr *Align, Decl *New)
 
static void instantiateDependentAnnotationAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AnnotateAttr *Attr, Decl *New)
 
static ExprinstantiateDependentFunctionAttrCondition (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const Attr *A, Expr *OldCond, const Decl *Tmpl, FunctionDecl *New)
 
static void instantiateDependentEnableIfAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const EnableIfAttr *EIA, const Decl *Tmpl, FunctionDecl *New)
 
static void instantiateDependentDiagnoseIfAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const DiagnoseIfAttr *DIA, const Decl *Tmpl, FunctionDecl *New)
 
static void instantiateDependentCUDALaunchBoundsAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const CUDALaunchBoundsAttr &Attr, Decl *New)
 
static void instantiateDependentModeAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const ModeAttr &Attr, Decl *New)
 
static void instantiateOMPDeclareSimdDeclAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const OMPDeclareSimdDeclAttr &Attr, Decl *New)
 Instantiation of 'declare simd' attribute and its arguments. More...
 
static void instantiateOMPDeclareVariantAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const OMPDeclareVariantAttr &Attr, Decl *New)
 Instantiation of 'declare variant' attribute and its arguments. More...
 
static void instantiateDependentAMDGPUFlatWorkGroupSizeAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AMDGPUFlatWorkGroupSizeAttr &Attr, Decl *New)
 
static ExplicitSpecifier instantiateExplicitSpecifier (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, ExplicitSpecifier ES, FunctionDecl *New)
 
static void instantiateDependentAMDGPUWavesPerEUAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AMDGPUWavesPerEUAttr &Attr, Decl *New)
 
static void instantiateDependentSYCLKernelAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const SYCLKernelAttr &Attr, Decl *New)
 
static bool isRelevantAttr (Sema &S, const Decl *D, const Attr *A)
 Determine whether the attribute A might be relevant to the declaration D. More...
 
static Sema::RetainOwnershipKind attrToRetainOwnershipKind (const Attr *A)
 
template<typename DeclT >
static DeclT * getPreviousDeclForInstantiation (DeclT *D)
 Get the previous declaration of a declaration for the purposes of template instantiation. More...
 
static QualType adjustFunctionTypeForInstantiation (ASTContext &Context, FunctionDecl *D, TypeSourceInfo *TInfo)
 Adjust the given function type for an instantiation of the given declaration, to cope with modifications to the function's type that aren't reflected in the type-source information. More...
 
static void collectUnexpandedParameterPacks (Sema &S, TemplateParameterList *Params, SmallVectorImpl< UnexpandedParameterPack > &Unexpanded)
 
static bool isInstantiationOf (ClassTemplateDecl *Pattern, ClassTemplateDecl *Instance)
 
static bool isInstantiationOf (FunctionTemplateDecl *Pattern, FunctionTemplateDecl *Instance)
 
static bool isInstantiationOf (ClassTemplatePartialSpecializationDecl *Pattern, ClassTemplatePartialSpecializationDecl *Instance)
 
static bool isInstantiationOf (CXXRecordDecl *Pattern, CXXRecordDecl *Instance)
 
static bool isInstantiationOf (FunctionDecl *Pattern, FunctionDecl *Instance)
 
static bool isInstantiationOf (EnumDecl *Pattern, EnumDecl *Instance)
 
static bool isInstantiationOf (UsingShadowDecl *Pattern, UsingShadowDecl *Instance, ASTContext &C)
 
static bool isInstantiationOf (UsingDecl *Pattern, UsingDecl *Instance, ASTContext &C)
 
template<typename T >
static bool isInstantiationOfUnresolvedUsingDecl (T *Pattern, Decl *Other, ASTContext &Ctx)
 
static bool isInstantiationOfStaticDataMember (VarDecl *Pattern, VarDecl *Instance)
 
static bool isInstantiationOf (ASTContext &Ctx, NamedDecl *D, Decl *Other)
 
template<typename ForwardIterator >
static NamedDeclfindInstantiationOf (ASTContext &Ctx, NamedDecl *D, ForwardIterator first, ForwardIterator last)
 
static bool isDependentContextAtLevel (DeclContext *DC, unsigned Level)
 Determine whether the given context is dependent on template parameters at level Level or below. More...
 

Function Documentation

◆ adjustFunctionTypeForInstantiation()

static QualType adjustFunctionTypeForInstantiation ( ASTContext Context,
FunctionDecl D,
TypeSourceInfo TInfo 
)
static

Adjust the given function type for an instantiation of the given declaration, to cope with modifications to the function's type that aren't reflected in the type-source information.

Parameters
DThe declaration we're instantiating.
TInfoThe already-instantiated type.

Definition at line 1975 of file SemaTemplateInstantiateDecl.cpp.

References clang::Type::castAs(), clang::FunctionProtoType::ExtProtoInfo::ExtInfo, clang::FunctionType::getExtInfo(), clang::ASTContext::getFunctionType(), clang::ValueDecl::getType(), and clang::TypeSourceInfo::getType().

Referenced by clang::TemplateDeclInstantiator::VisitCXXMethodDecl(), and clang::TemplateDeclInstantiator::VisitFunctionDecl().

◆ attrToRetainOwnershipKind()

static Sema::RetainOwnershipKind attrToRetainOwnershipKind ( const Attr A)
static

◆ collectUnexpandedParameterPacks()

static void collectUnexpandedParameterPacks ( Sema S,
TemplateParameterList Params,
SmallVectorImpl< UnexpandedParameterPack > &  Unexpanded 
)
static

Definition at line 2952 of file SemaTemplateInstantiateDecl.cpp.

◆ findInstantiationOf()

template<typename ForwardIterator >
static NamedDecl* findInstantiationOf ( ASTContext Ctx,
NamedDecl D,
ForwardIterator  first,
ForwardIterator  last 
)
static

Definition at line 5945 of file SemaTemplateInstantiateDecl.cpp.

References isInstantiationOf().

◆ getPreviousDeclForInstantiation()

template<typename DeclT >
static DeclT* getPreviousDeclForInstantiation ( DeclT *  D)
static

Get the previous declaration of a declaration for the purposes of template instantiation.

If this finds a previous declaration, then the previous declaration of the instantiation of D should be an instantiation of the result of this function.

Definition at line 858 of file SemaTemplateInstantiateDecl.cpp.

References clang::Decl::getLexicalDeclContext(), and clang::Decl::getPreviousDecl().

Referenced by clang::TemplateDeclInstantiator::InstantiateTypedefNameDecl(), and clang::TemplateDeclInstantiator::VisitBaseUsingDecls().

◆ instantiateDependentAlignedAttr() [1/2]

static void instantiateDependentAlignedAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AlignedAttr *  Aligned,
Decl New 
)
static

Definition at line 104 of file SemaTemplateInstantiateDecl.cpp.

◆ instantiateDependentAlignedAttr() [2/2]

static void instantiateDependentAlignedAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AlignedAttr *  Aligned,
Decl New,
bool  IsPackExpansion 
)
static

Definition at line 85 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentAlignValueAttr()

static void instantiateDependentAlignValueAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AlignValueAttr *  Aligned,
Decl New 
)
static

Definition at line 165 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentAllocAlignAttr()

static void instantiateDependentAllocAlignAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AllocAlignAttr *  Align,
Decl New 
)
static

Definition at line 176 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentAMDGPUFlatWorkGroupSizeAttr()

static void instantiateDependentAMDGPUFlatWorkGroupSizeAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AMDGPUFlatWorkGroupSizeAttr &  Attr,
Decl New 
)
static

Definition at line 530 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentAMDGPUWavesPerEUAttr()

static void instantiateDependentAMDGPUWavesPerEUAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AMDGPUWavesPerEUAttr &  Attr,
Decl New 
)
static

Definition at line 573 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentAnnotationAttr()

static void instantiateDependentAnnotationAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AnnotateAttr *  Attr,
Decl New 
)
static

Definition at line 186 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentAssumeAlignedAttr()

static void instantiateDependentAssumeAlignedAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AssumeAlignedAttr *  Aligned,
Decl New 
)
static

Definition at line 142 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentCUDALaunchBoundsAttr()

static void instantiateDependentCUDALaunchBoundsAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const CUDALaunchBoundsAttr &  Attr,
Decl New 
)
static

Definition at line 280 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentDiagnoseIfAttr()

static void instantiateDependentDiagnoseIfAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const DiagnoseIfAttr *  DIA,
const Decl Tmpl,
FunctionDecl New 
)
static

Definition at line 266 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentEnableIfAttr()

static void instantiateDependentEnableIfAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const EnableIfAttr *  EIA,
const Decl Tmpl,
FunctionDecl New 
)
static

Definition at line 255 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentFunctionAttrCondition()

static Expr* instantiateDependentFunctionAttrCondition ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const Attr A,
Expr OldCond,
const Decl Tmpl,
FunctionDecl New 
)
static

Definition at line 224 of file SemaTemplateInstantiateDecl.cpp.

◆ instantiateDependentModeAttr()

static void instantiateDependentModeAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const ModeAttr &  Attr,
Decl New 
)
static

Definition at line 304 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateDependentSYCLKernelAttr()

static void instantiateDependentSYCLKernelAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const SYCLKernelAttr &  Attr,
Decl New 
)
static

Definition at line 599 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateExplicitSpecifier()

static ExplicitSpecifier instantiateExplicitSpecifier ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
ExplicitSpecifier  ES,
FunctionDecl New 
)
static

◆ instantiateOMPDeclareSimdDeclAttr()

static void instantiateOMPDeclareSimdDeclAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const OMPDeclareSimdDeclAttr &  Attr,
Decl New 
)
static

Instantiation of 'declare simd' attribute and its arguments.

Definition at line 312 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ instantiateOMPDeclareVariantAttr()

static void instantiateOMPDeclareVariantAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const OMPDeclareVariantAttr &  Attr,
Decl New 
)
static

Instantiation of 'declare variant' attribute and its arguments.

Definition at line 395 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs().

◆ isDeclWithinFunction()

static bool isDeclWithinFunction ( const Decl D)
static

◆ isDependentContextAtLevel()

static bool isDependentContextAtLevel ( DeclContext DC,
unsigned  Level 
)
static

Determine whether the given context is dependent on template parameters at level Level or below.

Sometimes we only substitute an inner set of template arguments and leave the outer templates alone. In such cases, contexts dependent only on the outer levels are not effectively dependent.

Definition at line 5974 of file SemaTemplateInstantiateDecl.cpp.

References clang::DeclContext::isDependentContext().

Referenced by clang::Sema::FindInstantiatedDecl().

◆ isInstantiationOf() [1/9]

static bool isInstantiationOf ( ASTContext Ctx,
NamedDecl D,
Decl Other 
)
static

◆ isInstantiationOf() [2/9]

static bool isInstantiationOf ( ClassTemplateDecl Pattern,
ClassTemplateDecl Instance 
)
static

◆ isInstantiationOf() [3/9]

static bool isInstantiationOf ( ClassTemplatePartialSpecializationDecl Pattern,
ClassTemplatePartialSpecializationDecl Instance 
)
static

◆ isInstantiationOf() [4/9]

static bool isInstantiationOf ( CXXRecordDecl Pattern,
CXXRecordDecl Instance 
)
static

◆ isInstantiationOf() [5/9]

static bool isInstantiationOf ( EnumDecl Pattern,
EnumDecl Instance 
)
static

◆ isInstantiationOf() [6/9]

static bool isInstantiationOf ( FunctionDecl Pattern,
FunctionDecl Instance 
)
static

◆ isInstantiationOf() [7/9]

static bool isInstantiationOf ( FunctionTemplateDecl Pattern,
FunctionTemplateDecl Instance 
)
static

◆ isInstantiationOf() [8/9]

static bool isInstantiationOf ( UsingDecl Pattern,
UsingDecl Instance,
ASTContext C 
)
static

Definition at line 5843 of file SemaTemplateInstantiateDecl.cpp.

References clang::declaresSameEntity().

◆ isInstantiationOf() [9/9]

static bool isInstantiationOf ( UsingShadowDecl Pattern,
UsingShadowDecl Instance,
ASTContext C 
)
static

Definition at line 5836 of file SemaTemplateInstantiateDecl.cpp.

References clang::declaresSameEntity().

◆ isInstantiationOfStaticDataMember()

static bool isInstantiationOfStaticDataMember ( VarDecl Pattern,
VarDecl Instance 
)
static

Definition at line 5875 of file SemaTemplateInstantiateDecl.cpp.

References clang::VarDecl::getCanonicalDecl().

Referenced by isInstantiationOf().

◆ isInstantiationOfUnresolvedUsingDecl()

template<typename T >
static bool isInstantiationOfUnresolvedUsingDecl ( T *  Pattern,
Decl Other,
ASTContext Ctx 
)
static

◆ isRelevantAttr()

static bool isRelevantAttr ( Sema S,
const Decl D,
const Attr A 
)
static

Determine whether the attribute A might be relevant to the declaration D.

If not, we can skip instantiating it. The attribute may or may not have been instantiated yet.

Definition at line 608 of file SemaTemplateInstantiateDecl.cpp.

Referenced by clang::Sema::InstantiateAttrs(), and clang::Sema::InstantiateAttrsForDecl().

◆ SubstQualifier()

template<typename DeclT >
static bool SubstQualifier ( Sema SemaRef,
const DeclT *  OldDecl,
DeclT *  NewDecl,
const MultiLevelTemplateArgumentList TemplateArgs 
)
static