clang 20.0.0git
Macros | Enumerations | Functions
SemaTemplate.cpp File Reference
#include "TreeTransform.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclFriend.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/DynamicRecursiveASTVisitor.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/TemplateName.h"
#include "clang/AST/TypeVisitor.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/EnterExpressionEvaluationContext.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Overload.h"
#include "clang/Sema/ParsedTemplate.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/SemaCUDA.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/Template.h"
#include "clang/Sema/TemplateDeduction.h"
#include "llvm/ADT/SmallBitVector.h"
#include "llvm/ADT/StringExtras.h"
#include <optional>
#include "clang/AST/TypeNodes.inc"

Go to the source code of this file.

Macros

#define TYPE(Class, Parent)    bool Visit##Class##Type(const Class##Type *);
 
#define ABSTRACT_TYPE(Class, Parent)    bool Visit##Class##Type(const Class##Type *) { return false; }
 
#define NON_CANONICAL_TYPE(Class, Parent)    bool Visit##Class##Type(const Class##Type *) { return false; }
 

Enumerations

enum  NullPointerValueKind { NPV_NotNullPointer , NPV_NullPointer , NPV_Error }
 

Functions

static TemplateArgumentLoc translateTemplateArgument (Sema &SemaRef, const ParsedTemplateArgument &Arg)
 
static void maybeDiagnoseTemplateParameterShadow (Sema &SemaRef, Scope *S, SourceLocation Loc, const IdentifierInfo *Name)
 
static TemplateArgumentListInfo makeTemplateArgumentListInfo (Sema &S, TemplateIdAnnotation &TemplateId)
 Convert the parser's template argument list representation into our form.
 
template<typename ArgumentLocAppender >
static ExprResult formImmediatelyDeclaredConstraint (Sema &S, NestedNameSpecifierLoc NS, DeclarationNameInfo NameInfo, ConceptDecl *NamedConcept, NamedDecl *FoundDecl, SourceLocation LAngleLoc, SourceLocation RAngleLoc, QualType ConstrainedType, SourceLocation ParamNameLoc, ArgumentLocAppender Appender, SourceLocation EllipsisLoc)
 
static void SetNestedNameSpecifier (Sema &S, TagDecl *T, const CXXScopeSpec &SS)
 
static bool DiagnoseDefaultTemplateArgument (Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange)
 Diagnose the presence of a default template argument on a template parameter, which is ill-formed in certain contexts.
 
static bool DiagnoseUnexpandedParameterPacks (Sema &S, TemplateTemplateParmDecl *TTP)
 Check for unexpanded parameter packs within the template parameters of a template template parameter, recursively.
 
static bool DependsOnTemplateParameters (QualType T, TemplateParameterList *Params)
 Determines whether a given type depends on the given parameter list.
 
static SourceRange getRangeOfTypeInNestedNameSpecifier (ASTContext &Context, QualType T, const CXXScopeSpec &SS)
 
static QualType builtinCommonTypeImpl (Sema &S, TemplateName BaseTemplate, SourceLocation TemplateLoc, ArrayRef< TemplateArgument > Ts)
 
static QualType checkBuiltinTemplateIdType (Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef< TemplateArgument > Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs)
 
static bool isEnableIfAliasTemplate (TypeAliasTemplateDecl *AliasTemplate)
 Determine whether this alias template is "enable_if_t".
 
static void collectConjunctionTerms (Expr *Clause, SmallVectorImpl< Expr * > &Terms)
 Collect all of the separable terms in the given condition, which might be a conjunction.
 
static ExprlookThroughRangesV3Condition (Preprocessor &PP, Expr *Cond)
 
static bool CheckTemplateSpecializationScope (Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization)
 Check whether a specialization is well-formed in the current context.
 
static TemplateSpecializationKind getTemplateSpecializationKind (Decl *D)
 Determine what kind of template specialization the given declaration is.
 
static bool isTemplateArgumentTemplateParameter (const TemplateArgument &Arg, unsigned Depth, unsigned Index)
 
static bool isSameAsPrimaryTemplate (TemplateParameterList *Params, ArrayRef< TemplateArgument > Args)
 
template<typename PartialSpecDecl >
static void checkMoreSpecializedThanPrimary (Sema &S, PartialSpecDecl *Partial)
 
static void noteNonDeducibleParameters (Sema &S, TemplateParameterList *TemplateParams, const llvm::SmallBitVector &DeducibleParams)
 
template<typename PartialSpecDecl >
static void checkTemplatePartialSpecialization (Sema &S, PartialSpecDecl *Partial)
 
static bool SubstDefaultTemplateArgument (Sema &SemaRef, TemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, TemplateTypeParmDecl *Param, ArrayRef< TemplateArgument > SugaredConverted, ArrayRef< TemplateArgument > CanonicalConverted, TemplateArgumentLoc &Output)
 Substitute template arguments into the default template argument for the given template type parameter.
 
static bool SubstDefaultTemplateArgument (Sema &SemaRef, TemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, NonTypeTemplateParmDecl *Param, ArrayRef< TemplateArgument > SugaredConverted, ArrayRef< TemplateArgument > CanonicalConverted, TemplateArgumentLoc &Output)
 Substitute template arguments into the default template argument for the given non-type template parameter.
 
static TemplateName SubstDefaultTemplateArgument (Sema &SemaRef, TemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, TemplateTemplateParmDecl *Param, ArrayRef< TemplateArgument > SugaredConverted, ArrayRef< TemplateArgument > CanonicalConverted, NestedNameSpecifierLoc &QualifierLoc)
 Substitute template arguments into the default template argument for the given template template parameter.
 
static TemplateArgumentLoc convertTypeTemplateArgumentToTemplate (ASTContext &Context, TypeLoc TLoc)
 Convert a template-argument that we parsed as a type into a template, if possible.
 
template<typename TemplateParmDecl >
static bool diagnoseMissingArgument (Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args)
 Diagnose a missing template argument.
 
static NullPointerValueKind isNullPointerValueTemplateArgument (Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity=nullptr)
 Determine whether the given template argument is a null pointer value of the appropriate type.
 
static bool CheckTemplateArgumentIsCompatibleWithParameter (Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType)
 Checks whether the given template argument is compatible with its template parameter.
 
static bool CheckTemplateArgumentAddressOfObjectOrFunction (Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted)
 Checks whether the given template argument is the address of an object or function according to C++ [temp.arg.nontype]p1.
 
static bool CheckTemplateArgumentPointerToMember (Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted)
 Checks whether the given template argument is a pointer to member constant according to C++ [temp.arg.nontype]p1.
 
static void DiagnoseTemplateParameterListArityMismatch (Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc)
 Diagnose a known arity mismatch when comparing template argument lists.
 
static Sema::SemaDiagnosticBuilder noteLocation (Sema &S, const NamedDecl &Decl, unsigned HereDiagID, unsigned ExternalDiagID)
 
static ExprBuildExpressionFromIntegralTemplateArgumentValue (Sema &S, QualType OrigT, const llvm::APSInt &Int, SourceLocation Loc)
 Construct a new expression that refers to the given integral template argument with the given source-location information.
 
static ExprBuildExpressionFromNonTypeTemplateArgumentValue (Sema &S, QualType T, const APValue &Val, SourceLocation Loc)
 
static bool MatchTemplateParameterKind (Sema &S, NamedDecl *New, const Sema::TemplateCompareNewDeclInfo &NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc)
 Match two template parameters within template parameter lists.
 
static SourceRange findTemplateParameterInType (unsigned Depth, Expr *E)
 
static SourceRange findTemplateParameter (unsigned Depth, TypeLoc TL)
 
static bool CheckNonTypeTemplatePartialSpecializationArgs (Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument)
 Subroutine of Sema::CheckTemplatePartialSpecializationArgs that checks non-type template partial specialization arguments.
 
static bool RemoveLookupResult (LookupResult &R, NamedDecl *C)
 
static void StripImplicitInstantiation (NamedDecl *D, bool MinGW)
 Strips various properties off an implicit instantiation that has just been explicitly specialized.
 
static SourceLocation DiagLocForExplicitInstantiation (NamedDecl *D, SourceLocation PointOfInstantiation)
 Compute the diagnostic location for an explicit instantiation.
 
template<typename DeclT >
static void completeMemberSpecializationImpl (Sema &S, DeclT *OrigD, SourceLocation Loc)
 Complete the explicit specialization of a member of a class template by updating the instantiated member to be marked as an explicit specialization.
 
static bool CheckExplicitInstantiationScope (Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName)
 Check the scope of an explicit instantiation.
 
static bool CheckExplicitInstantiation (Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName, TemplateSpecializationKind TSK)
 Common checks for whether an explicit instantiation of D is valid.
 
static bool ScopeSpecifierHasTemplateId (const CXXScopeSpec &SS)
 Determine whether the given scope specifier has a template-id in it.
 
static void dllExportImportClassTemplateSpecialization (Sema &S, ClassTemplateSpecializationDecl *Def)
 Make a dllexport or dllimport attr on a class template specialization take effect.
 
static bool isEnableIf (NestedNameSpecifierLoc NNS, const IdentifierInfo &II, SourceRange &CondRange, Expr *&Cond)
 Determine whether this failed name lookup should be treated as being disabled by a usage of std::enable_if.
 

Macro Definition Documentation

◆ ABSTRACT_TYPE

#define ABSTRACT_TYPE (   Class,
  Parent 
)     bool Visit##Class##Type(const Class##Type *) { return false; }

Definition at line 5825 of file SemaTemplate.cpp.

◆ NON_CANONICAL_TYPE

#define NON_CANONICAL_TYPE (   Class,
  Parent 
)     bool Visit##Class##Type(const Class##Type *) { return false; }

Definition at line 5827 of file SemaTemplate.cpp.

◆ TYPE

#define TYPE (   Class,
  Parent 
)     bool Visit##Class##Type(const Class##Type *);

Definition at line 5823 of file SemaTemplate.cpp.

Enumeration Type Documentation

◆ NullPointerValueKind

Enumerator
NPV_NotNullPointer 
NPV_NullPointer 
NPV_Error 

Definition at line 6130 of file SemaTemplate.cpp.

Function Documentation

◆ BuildExpressionFromIntegralTemplateArgumentValue()

static Expr * BuildExpressionFromIntegralTemplateArgumentValue ( Sema S,
QualType  OrigT,
const llvm::APSInt Int,
SourceLocation  Loc 
)
static

◆ BuildExpressionFromNonTypeTemplateArgumentValue()

static Expr * BuildExpressionFromNonTypeTemplateArgumentValue ( Sema S,
QualType  T,
const APValue Val,
SourceLocation  Loc 
)
static

◆ builtinCommonTypeImpl()

static QualType builtinCommonTypeImpl ( Sema S,
TemplateName  BaseTemplate,
SourceLocation  TemplateLoc,
ArrayRef< TemplateArgument Ts 
)
static

◆ checkBuiltinTemplateIdType()

static QualType checkBuiltinTemplateIdType ( Sema SemaRef,
BuiltinTemplateDecl BTD,
ArrayRef< TemplateArgument Converted,
SourceLocation  TemplateLoc,
TemplateArgumentListInfo TemplateArgs 
)
static

◆ CheckExplicitInstantiation()

static bool CheckExplicitInstantiation ( Sema S,
NamedDecl D,
SourceLocation  InstLoc,
bool  WasQualifiedName,
TemplateSpecializationKind  TSK 
)
static

Common checks for whether an explicit instantiation of D is valid.

Definition at line 9646 of file SemaTemplate.cpp.

References CheckExplicitInstantiationScope(), D, clang::SemaBase::Diag(), clang::Internal, and clang::TSK_ExplicitInstantiationDeclaration.

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

◆ CheckExplicitInstantiationScope()

static bool CheckExplicitInstantiationScope ( Sema S,
NamedDecl D,
SourceLocation  InstLoc,
bool  WasQualifiedName 
)
static

◆ checkMoreSpecializedThanPrimary()

template<typename PartialSpecDecl >
static void checkMoreSpecializedThanPrimary ( Sema S,
PartialSpecDecl *  Partial 
)
static

◆ CheckNonTypeTemplatePartialSpecializationArgs()

static bool CheckNonTypeTemplatePartialSpecializationArgs ( Sema S,
SourceLocation  TemplateNameLoc,
NonTypeTemplateParmDecl Param,
const TemplateArgument Args,
unsigned  NumArgs,
bool  IsDefaultArgument 
)
static

◆ CheckTemplateArgumentAddressOfObjectOrFunction()

static bool CheckTemplateArgumentAddressOfObjectOrFunction ( Sema S,
NonTypeTemplateParmDecl Param,
QualType  ParamType,
Expr ArgIn,
TemplateArgument SugaredConverted,
TemplateArgument CanonicalConverted 
)
static

◆ CheckTemplateArgumentIsCompatibleWithParameter()

static bool CheckTemplateArgumentIsCompatibleWithParameter ( Sema S,
NonTypeTemplateParmDecl Param,
QualType  ParamType,
Expr ArgIn,
Expr Arg,
QualType  ArgType 
)
static

◆ CheckTemplateArgumentPointerToMember()

static bool CheckTemplateArgumentPointerToMember ( Sema S,
NonTypeTemplateParmDecl Param,
QualType  ParamType,
Expr *&  ResultArg,
TemplateArgument SugaredConverted,
TemplateArgument CanonicalConverted 
)
static

◆ checkTemplatePartialSpecialization()

template<typename PartialSpecDecl >
static void checkTemplatePartialSpecialization ( Sema S,
PartialSpecDecl *  Partial 
)
static

◆ CheckTemplateSpecializationScope()

static bool CheckTemplateSpecializationScope ( Sema S,
NamedDecl Specialized,
NamedDecl PrevDecl,
SourceLocation  Loc,
bool  IsPartialSpecialization 
)
static

Check whether a specialization is well-formed in the current context.

This routine determines whether a template specialization can be declared in the current context (C++ [temp.expl.spec]p2).

Parameters
Sthe semantic analysis object for which this check is being performed.
Specializedthe entity being specialized or instantiated, which may be a kind of template (class template, function template, etc.) or a member of a class template (member function, static data member, member class).
PrevDeclthe previous declaration of this entity, if any.
Locthe location of the explicit specialization or instantiation of this entity.
IsPartialSpecializationwhether this is a partial specialization of a class template.
Returns
true if there was an error that we cannot recover from, false otherwise.

Definition at line 8075 of file SemaTemplate.cpp.

References clang::Sema::CurContext, Diag(), clang::SemaBase::Diag(), clang::DeclContext::Encloses(), clang::DeclContext::Equals(), clang::Decl::getDeclContext(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::DeclContext::getRedeclContext(), clang::DeclContext::isFileContext(), clang::DeclContext::isFunctionOrMethod(), clang::DeclContext::isRecord(), and Loc.

Referenced by clang::Sema::ActOnClassTemplateSpecialization(), clang::Sema::ActOnVarTemplateSpecialization(), clang::Sema::CheckFunctionTemplateSpecialization(), and clang::Sema::CheckMemberSpecialization().

◆ collectConjunctionTerms()

static void collectConjunctionTerms ( Expr Clause,
SmallVectorImpl< Expr * > &  Terms 
)
static

Collect all of the separable terms in the given condition, which might be a conjunction.

FIXME: The right answer is to convert the logical expression into disjunctive normal form, so we can find the first failed term within each possible clause.

Definition at line 3330 of file SemaTemplate.cpp.

References collectConjunctionTerms(), and clang::Expr::IgnoreParenImpCasts().

Referenced by collectConjunctionTerms(), and clang::Sema::findFailedBooleanCondition().

◆ completeMemberSpecializationImpl()

template<typename DeclT >
static void completeMemberSpecializationImpl ( Sema S,
DeclT *  OrigD,
SourceLocation  Loc 
)
static

Complete the explicit specialization of a member of a class template by updating the instantiated member to be marked as an explicit specialization.

Parameters
OrigDThe member declaration instantiated from the template.
LocThe location of the explicit specialization of the member.

Definition at line 9560 of file SemaTemplate.cpp.

References Loc, clang::TSK_ExplicitSpecialization, and clang::TSK_ImplicitInstantiation.

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

◆ convertTypeTemplateArgumentToTemplate()

static TemplateArgumentLoc convertTypeTemplateArgumentToTemplate ( ASTContext Context,
TypeLoc  TLoc 
)
static

Convert a template-argument that we parsed as a type into a template, if possible.

C++ permits injected-class-names to perform dual service as template template arguments and as template type arguments.

Definition at line 5159 of file SemaTemplate.cpp.

References clang::TypeLoc::getAs(), and clang::None.

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

◆ DependsOnTemplateParameters()

static bool DependsOnTemplateParameters ( QualType  T,
TemplateParameterList Params 
)
static

Determines whether a given type depends on the given parameter list.

Definition at line 2661 of file SemaTemplate.cpp.

References clang::TemplateParameterList::size(), and clang::T.

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

◆ DiagLocForExplicitInstantiation()

static SourceLocation DiagLocForExplicitInstantiation ( NamedDecl D,
SourceLocation  PointOfInstantiation 
)
static

Compute the diagnostic location for an explicit instantiation.

Definition at line 8844 of file SemaTemplate.cpp.

References D, and clang::SourceLocation::isValid().

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

◆ DiagnoseDefaultTemplateArgument()

static bool DiagnoseDefaultTemplateArgument ( Sema S,
Sema::TemplateParamListContext  TPC,
SourceLocation  ParamLoc,
SourceRange  DefArgRange 
)
static

Diagnose the presence of a default template argument on a template parameter, which is ill-formed in certain contexts.

Returns
true if the default template argument should be dropped.

Definition at line 2196 of file SemaTemplate.cpp.

References clang::SemaBase::Diag(), clang::Sema::getLangOpts(), clang::Sema::TPC_ClassTemplate, clang::Sema::TPC_ClassTemplateMember, clang::Sema::TPC_FriendClassTemplate, clang::Sema::TPC_FriendFunctionTemplate, clang::Sema::TPC_FriendFunctionTemplateDefinition, clang::Sema::TPC_FunctionTemplate, clang::Sema::TPC_TypeAliasTemplate, and clang::Sema::TPC_VarTemplate.

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

◆ diagnoseMissingArgument()

template<typename TemplateParmDecl >
static bool diagnoseMissingArgument ( Sema S,
SourceLocation  Loc,
TemplateDecl TD,
const TemplateParmDecl *  D,
TemplateArgumentListInfo Args 
)
static

◆ DiagnoseTemplateParameterListArityMismatch()

static void DiagnoseTemplateParameterListArityMismatch ( Sema S,
TemplateParameterList New,
TemplateParameterList Old,
Sema::TemplateParameterListEqualKind  Kind,
SourceLocation  TemplateArgLoc 
)
static

◆ DiagnoseUnexpandedParameterPacks()

static bool DiagnoseUnexpandedParameterPacks ( Sema S,
TemplateTemplateParmDecl TTP 
)
static

◆ dllExportImportClassTemplateSpecialization()

static void dllExportImportClassTemplateSpecialization ( Sema S,
ClassTemplateSpecializationDecl Def 
)
static

◆ findTemplateParameter()

static SourceRange findTemplateParameter ( unsigned  Depth,
TypeLoc  TL 
)
static

◆ findTemplateParameterInType()

static SourceRange findTemplateParameterInType ( unsigned  Depth,
Expr E 
)
static

◆ formImmediatelyDeclaredConstraint()

template<typename ArgumentLocAppender >
static ExprResult formImmediatelyDeclaredConstraint ( Sema S,
NestedNameSpecifierLoc  NS,
DeclarationNameInfo  NameInfo,
ConceptDecl NamedConcept,
NamedDecl FoundDecl,
SourceLocation  LAngleLoc,
SourceLocation  RAngleLoc,
QualType  ConstrainedType,
SourceLocation  ParamNameLoc,
ArgumentLocAppender  Appender,
SourceLocation  EllipsisLoc 
)
static

◆ getRangeOfTypeInNestedNameSpecifier()

static SourceRange getRangeOfTypeInNestedNameSpecifier ( ASTContext Context,
QualType  T,
const CXXScopeSpec SS 
)
static

◆ getTemplateSpecializationKind()

static TemplateSpecializationKind getTemplateSpecializationKind ( Decl D)
static

◆ isEnableIf()

static bool isEnableIf ( NestedNameSpecifierLoc  NNS,
const IdentifierInfo II,
SourceRange CondRange,
Expr *&  Cond 
)
static

◆ isEnableIfAliasTemplate()

static bool isEnableIfAliasTemplate ( TypeAliasTemplateDecl AliasTemplate)
static

Determine whether this alias template is "enable_if_t".

libc++ >=14 uses "__enable_if_t" in C++11 mode.

Definition at line 3319 of file SemaTemplate.cpp.

References clang::AliasTemplate.

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

◆ isNullPointerValueTemplateArgument()

static NullPointerValueKind isNullPointerValueTemplateArgument ( Sema S,
NonTypeTemplateParmDecl Param,
QualType  ParamType,
Expr Arg,
Decl Entity = nullptr 
)
static

◆ isSameAsPrimaryTemplate()

static bool isSameAsPrimaryTemplate ( TemplateParameterList Params,
ArrayRef< TemplateArgument Args 
)
static

◆ isTemplateArgumentTemplateParameter()

static bool isTemplateArgumentTemplateParameter ( const TemplateArgument Arg,
unsigned  Depth,
unsigned  Index 
)
static

◆ lookThroughRangesV3Condition()

static Expr * lookThroughRangesV3Condition ( Preprocessor PP,
Expr Cond 
)
static

◆ makeTemplateArgumentListInfo()

static TemplateArgumentListInfo makeTemplateArgumentListInfo ( Sema S,
TemplateIdAnnotation TemplateId 
)
static

◆ MatchTemplateParameterKind()

static bool MatchTemplateParameterKind ( Sema S,
NamedDecl New,
const Sema::TemplateCompareNewDeclInfo NewInstFrom,
NamedDecl Old,
const NamedDecl OldInstFrom,
bool  Complain,
Sema::TemplateParameterListEqualKind  Kind,
SourceLocation  TemplateArgLoc 
)
static

◆ maybeDiagnoseTemplateParameterShadow()

static void maybeDiagnoseTemplateParameterShadow ( Sema SemaRef,
Scope S,
SourceLocation  Loc,
const IdentifierInfo Name 
)
static

◆ noteLocation()

static Sema::SemaDiagnosticBuilder noteLocation ( Sema S,
const NamedDecl Decl,
unsigned  HereDiagID,
unsigned  ExternalDiagID 
)
static

◆ noteNonDeducibleParameters()

static void noteNonDeducibleParameters ( Sema S,
TemplateParameterList TemplateParams,
const llvm::SmallBitVector &  DeducibleParams 
)
static

◆ RemoveLookupResult()

static bool RemoveLookupResult ( LookupResult R,
NamedDecl C 
)
static

◆ ScopeSpecifierHasTemplateId()

static bool ScopeSpecifierHasTemplateId ( const CXXScopeSpec SS)
static

Determine whether the given scope specifier has a template-id in it.

Definition at line 9669 of file SemaTemplate.cpp.

References clang::NestedNameSpecifier::getAsType(), clang::NestedNameSpecifier::getPrefix(), clang::CXXScopeSpec::getScopeRep(), clang::CXXScopeSpec::isSet(), and clang::T.

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

◆ SetNestedNameSpecifier()

static void SetNestedNameSpecifier ( Sema S,
TagDecl T,
const CXXScopeSpec SS 
)
static

◆ StripImplicitInstantiation()

static void StripImplicitInstantiation ( NamedDecl D,
bool  MinGW 
)
static

Strips various properties off an implicit instantiation that has just been explicitly specialized.

Definition at line 8833 of file SemaTemplate.cpp.

References D, and clang::Decl::dropAttrs().

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

◆ SubstDefaultTemplateArgument() [1/3]

static bool SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
NonTypeTemplateParmDecl Param,
ArrayRef< TemplateArgument SugaredConverted,
ArrayRef< TemplateArgument CanonicalConverted,
TemplateArgumentLoc Output 
)
static

Substitute template arguments into the default template argument for the given non-type template parameter.

Parameters
SemaRefthe semantic analysis object for which we are performing the substitution.
Templatethe template that we are synthesizing template arguments for.
TemplateLocthe location of the template name that started the template-id we are checking.
RAngleLocthe location of the right angle bracket ('>') that terminates the template-id.
Paramthe non-type template parameter whose default we are substituting into.
Convertedthe list of template arguments provided for template parameters that precede Param in the template parameter list.
Returns
the substituted template argument, or NULL if an error occurred.

Definition at line 5017 of file SemaTemplate.cpp.

References clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments(), clang::Sema::ConstantEvaluated, clang::Decl::getDeclContext(), clang::NonTypeTemplateParmDecl::getDefaultArgument(), clang::NonTypeTemplateParmDecl::getDepth(), clang::Sema::InstantiatingTemplate::isInvalid(), and clang::Sema::SubstTemplateArgument().

◆ SubstDefaultTemplateArgument() [2/3]

static TemplateName SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
TemplateTemplateParmDecl Param,
ArrayRef< TemplateArgument SugaredConverted,
ArrayRef< TemplateArgument CanonicalConverted,
NestedNameSpecifierLoc QualifierLoc 
)
static

Substitute template arguments into the default template argument for the given template template parameter.

Parameters
SemaRefthe semantic analysis object for which we are performing the substitution.
Templatethe template that we are synthesizing template arguments for.
TemplateLocthe location of the template name that started the template-id we are checking.
RAngleLocthe location of the right angle bracket ('>') that terminates the template-id.
Paramthe template template parameter whose default we are substituting into.
Convertedthe list of template arguments provided for template parameters that precede Param in the template parameter list.
QualifierLocWill be set to the nested-name-specifier (with source-location information) that precedes the template name.
Returns
the substituted template argument, or NULL if an error occurred.

Definition at line 5067 of file SemaTemplate.cpp.

References clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments(), clang::TemplateArgumentLoc::getArgument(), clang::TemplateArgument::getAsTemplate(), clang::Decl::getDeclContext(), clang::TemplateTemplateParmDecl::getDefaultArgument(), clang::TemplateTemplateParmDecl::getDepth(), clang::TemplateArgumentLoc::getTemplateNameLoc(), clang::TemplateArgumentLoc::getTemplateQualifierLoc(), clang::Sema::InstantiatingTemplate::isInvalid(), clang::Sema::SubstNestedNameSpecifierLoc(), and clang::Sema::SubstTemplateName().

◆ SubstDefaultTemplateArgument() [3/3]

static bool SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
TemplateTypeParmDecl Param,
ArrayRef< TemplateArgument SugaredConverted,
ArrayRef< TemplateArgument CanonicalConverted,
TemplateArgumentLoc Output 
)
static

Substitute template arguments into the default template argument for the given template type parameter.

Parameters
SemaRefthe semantic analysis object for which we are performing the substitution.
Templatethe template that we are synthesizing template arguments for.
TemplateLocthe location of the template name that started the template-id we are checking.
RAngleLocthe location of the right angle bracket ('>') that terminates the template-id.
Paramthe template template parameter whose default we are substituting into.
Convertedthe list of template arguments provided for template parameters that precede Param in the template parameter list.
Outputthe resulting substituted template argument.
Returns
true if an error occurred.

Definition at line 4957 of file SemaTemplate.cpp.

References clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments(), clang::TemplateArgumentLoc::getArgument(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::TemplateTypeParmDecl::getDefaultArgument(), clang::TemplateTypeParmDecl::getDefaultArgumentLoc(), clang::TemplateTypeParmDecl::getDepth(), clang::TemplateArgument::isInstantiationDependent(), clang::Sema::InstantiatingTemplate::isInvalid(), and clang::Sema::SubstTemplateArgument().

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

◆ translateTemplateArgument()

static TemplateArgumentLoc translateTemplateArgument ( Sema SemaRef,
const ParsedTemplateArgument Arg 
)
static