clang 20.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/TypeOrdering.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Sema/EnterExpressionEvaluationContext.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/SemaAMDGPU.h"
#include "clang/Sema/SemaCUDA.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/SemaObjC.h"
#include "clang/Sema/SemaOpenMP.h"
#include "clang/Sema/SemaSwift.h"
#include "clang/Sema/Template.h"
#include "clang/Sema/TemplateInstCallback.h"
#include "llvm/Support/TimeProfiler.h"
#include <optional>
#include "clang/Sema/AttrTemplateInstantiate.inc"

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.
 
static void instantiateOMPDeclareVariantAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const OMPDeclareVariantAttr &Attr, Decl *New)
 Instantiation of 'declare variant' attribute and its arguments.
 
static void instantiateDependentAMDGPUFlatWorkGroupSizeAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AMDGPUFlatWorkGroupSizeAttr &Attr, Decl *New)
 
static void instantiateDependentAMDGPUWavesPerEUAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AMDGPUWavesPerEUAttr &Attr, Decl *New)
 
static void instantiateDependentAMDGPUMaxNumWorkGroupsAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AMDGPUMaxNumWorkGroupsAttr &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.
 
static void instantiateDependentHLSLParamModifierAttr (Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const HLSLParamModifierAttr *Attr, Decl *New)
 
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.
 
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.
 
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.
 

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 2114 of file SemaTemplateInstantiateDecl.cpp.

References clang::Type::castAs(), D, clang::FunctionProtoType::ExtProtoInfo::ExtInfo, clang::FunctionType::getExtInfo(), clang::ASTContext::getFunctionType(), 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

◆ findInstantiationOf()

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

Definition at line 6085 of file SemaTemplateInstantiateDecl.cpp.

References D, and isInstantiationOf().

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

◆ 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 928 of file SemaTemplateInstantiateDecl.cpp.

References D, clang::Decl::getDeclContext(), clang::Decl::getLexicalDeclContext(), clang::Decl::getPreviousDecl(), and clang::Result.

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

◆ instantiateDependentAlignedAttr() [2/2]

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

◆ instantiateDependentAlignValueAttr()

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

◆ instantiateDependentAllocAlignAttr()

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

◆ instantiateDependentAMDGPUFlatWorkGroupSizeAttr()

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

◆ instantiateDependentAMDGPUMaxNumWorkGroupsAttr()

static void instantiateDependentAMDGPUMaxNumWorkGroupsAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const AMDGPUMaxNumWorkGroupsAttr &  Attr,
Decl New 
)
static

◆ instantiateDependentAMDGPUWavesPerEUAttr()

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

◆ instantiateDependentAnnotationAttr()

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

◆ instantiateDependentAssumeAlignedAttr()

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

◆ instantiateDependentCUDALaunchBoundsAttr()

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

◆ instantiateDependentDiagnoseIfAttr()

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

◆ instantiateDependentEnableIfAttr()

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

◆ instantiateDependentFunctionAttrCondition()

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

◆ instantiateDependentHLSLParamModifierAttr()

static void instantiateDependentHLSLParamModifierAttr ( Sema S,
const MultiLevelTemplateArgumentList TemplateArgs,
const HLSLParamModifierAttr *  Attr,
Decl New 
)
static

◆ instantiateDependentModeAttr()

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

◆ instantiateDependentSYCLKernelAttr()

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

◆ instantiateOMPDeclareSimdDeclAttr()

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

◆ instantiateOMPDeclareVariantAttr()

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

◆ 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 6110 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 5983 of file SemaTemplateInstantiateDecl.cpp.

References clang::C, and clang::declaresSameEntity().

◆ isInstantiationOf() [9/9]

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

Definition at line 5976 of file SemaTemplateInstantiateDecl.cpp.

References clang::C, and clang::declaresSameEntity().

◆ isInstantiationOfStaticDataMember()

static bool isInstantiationOfStaticDataMember ( VarDecl Pattern,
VarDecl Instance 
)
static

Definition at line 6015 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

◆ SubstQualifier()

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