clang
9.0.0
|
#include "clang/Sema/Template.h"
Public Types | |
using | delayed_partial_spec_iterator = SmallVectorImpl< std::pair< ClassTemplateDecl *, ClassTemplatePartialSpecializationDecl * > >::iterator |
using | delayed_var_partial_spec_iterator = SmallVectorImpl< std::pair< VarTemplateDecl *, VarTemplatePartialSpecializationDecl * > >::iterator |
Public Member Functions | |
TemplateDeclInstantiator (Sema &SemaRef, DeclContext *Owner, const MultiLevelTemplateArgumentList &TemplateArgs) | |
Decl * | VisitCXXMethodDecl (CXXMethodDecl *D, TemplateParameterList *TemplateParams, Optional< const ASTTemplateArgumentListInfo *> ClassScopeSpecializationArgs=llvm::None) |
Decl * | VisitFunctionDecl (FunctionDecl *D, TemplateParameterList *TemplateParams) |
Normal class members are of more specific types and therefore don't make it here. More... | |
Decl * | VisitDecl (Decl *D) |
Decl * | VisitVarDecl (VarDecl *D, bool InstantiatingVarTemplate, ArrayRef< BindingDecl *> *Bindings=nullptr) |
void | enableLateAttributeInstantiation (Sema::LateInstantiatedAttrVec *LA) |
void | disableLateAttributeInstantiation () |
LocalInstantiationScope * | getStartingScope () const |
delayed_partial_spec_iterator | delayed_partial_spec_begin () |
Return an iterator to the beginning of the set of "delayed" partial specializations, which must be passed to InstantiateClassTemplatePartialSpecialization once the class definition has been completed. More... | |
delayed_var_partial_spec_iterator | delayed_var_partial_spec_begin () |
delayed_partial_spec_iterator | delayed_partial_spec_end () |
Return an iterator to the end of the set of "delayed" partial specializations, which must be passed to InstantiateClassTemplatePartialSpecialization once the class definition has been completed. More... | |
delayed_var_partial_spec_iterator | delayed_var_partial_spec_end () |
TypeSourceInfo * | SubstFunctionType (FunctionDecl *D, SmallVectorImpl< ParmVarDecl *> &Params) |
bool | InitFunctionInstantiation (FunctionDecl *New, FunctionDecl *Tmpl) |
Initializes the common fields of an instantiation function declaration (New) from the corresponding fields of its template (Tmpl). More... | |
bool | InitMethodInstantiation (CXXMethodDecl *New, CXXMethodDecl *Tmpl) |
Initializes common fields of an instantiated method declaration (New) from the corresponding fields of its template (Tmpl). More... | |
TemplateParameterList * | SubstTemplateParams (TemplateParameterList *List) |
Instantiates a nested template parameter list in the current instantiation context. More... | |
bool | SubstQualifier (const DeclaratorDecl *OldDecl, DeclaratorDecl *NewDecl) |
bool | SubstQualifier (const TagDecl *OldDecl, TagDecl *NewDecl) |
Decl * | VisitVarTemplateSpecializationDecl (VarTemplateDecl *VarTemplate, VarDecl *FromVar, void *InsertPos, const TemplateArgumentListInfo &TemplateArgsInfo, ArrayRef< TemplateArgument > Converted, VarTemplateSpecializationDecl *PrevDecl=nullptr) |
Decl * | InstantiateTypedefNameDecl (TypedefNameDecl *D, bool IsTypeAlias) |
ClassTemplatePartialSpecializationDecl * | InstantiateClassTemplatePartialSpecialization (ClassTemplateDecl *ClassTemplate, ClassTemplatePartialSpecializationDecl *PartialSpec) |
Instantiate the declaration of a class template partial specialization. More... | |
VarTemplatePartialSpecializationDecl * | InstantiateVarTemplatePartialSpecialization (VarTemplateDecl *VarTemplate, VarTemplatePartialSpecializationDecl *PartialSpec) |
Instantiate the declaration of a variable template partial specialization. More... | |
void | InstantiateEnumDefinition (EnumDecl *Enum, EnumDecl *Pattern) |
![]() | |
Decl * | Visit (PTR(Decl) D) |
Decl * | VisitDecl (PTR(Decl) D) |
Definition at line 417 of file Template.h.
using clang::TemplateDeclInstantiator::delayed_partial_spec_iterator = SmallVectorImpl<std::pair< ClassTemplateDecl *, ClassTemplatePartialSpecializationDecl *> >::iterator |
Definition at line 502 of file Template.h.
using clang::TemplateDeclInstantiator::delayed_var_partial_spec_iterator = SmallVectorImpl<std::pair< VarTemplateDecl *, VarTemplatePartialSpecializationDecl *> >::iterator |
Definition at line 505 of file Template.h.
|
inline |
Definition at line 443 of file Template.h.
|
inline |
Return an iterator to the beginning of the set of "delayed" partial specializations, which must be passed to InstantiateClassTemplatePartialSpecialization once the class definition has been completed.
Definition at line 511 of file Template.h.
|
inline |
Return an iterator to the end of the set of "delayed" partial specializations, which must be passed to InstantiateClassTemplatePartialSpecialization once the class definition has been completed.
Definition at line 523 of file Template.h.
|
inline |
Definition at line 515 of file Template.h.
|
inline |
Definition at line 527 of file Template.h.
|
inline |
Definition at line 494 of file Template.h.
|
inline |
Definition at line 488 of file Template.h.
References clang::Sema::CurrentInstantiationScope.
|
inline |
Definition at line 499 of file Template.h.
bool TemplateDeclInstantiator::InitFunctionInstantiation | ( | FunctionDecl * | New, |
FunctionDecl * | Tmpl | ||
) |
Initializes the common fields of an instantiation function declaration (New) from the corresponding fields of its template (Tmpl).
Definition at line 3938 of file SemaTemplateInstantiateDecl.cpp.
References clang::atTemplateBegin(), clang::atTemplateEnd(), clang::Sema::CodeSynthesisContexts, clang::Sema::Context, clang::EST_BasicNoexcept, clang::EST_DynamicNone, clang::EST_None, clang::EST_Unevaluated, clang::EST_Uninstantiated, clang::FunctionProtoType::ExtProtoInfo::ExceptionSpec, clang::Type::getAs(), clang::FunctionProtoType::getExtProtoInfo(), clang::ASTContext::getFunctionType(), clang::Sema::getLangOpts(), clang::ASTContext::getManglingNumber(), clang::FunctionType::getNoReturnAttr(), clang::FunctionProtoType::getParamTypes(), clang::FunctionType::getReturnType(), clang::ValueDecl::getType(), clang::FunctionProtoType::hasExceptionSpec(), clang::Sema::InstantiateAttrs(), clang::FunctionDecl::isDefined(), clang::FunctionDecl::isDeleted(), clang::Decl::isImplicit(), clang::Decl::isLexicallyWithinFunctionOrMethod(), clang::FunctionDecl::setDeletedAsWritten(), clang::Decl::setImplicit(), clang::ASTContext::setManglingNumber(), clang::ValueDecl::setType(), clang::FunctionProtoType::ExceptionSpecInfo::SourceDecl, clang::FunctionProtoType::ExceptionSpecInfo::SourceTemplate, clang::Sema::SubstExceptionSpec(), clang::Sema::TemplateInstCallbacks, and clang::FunctionProtoType::ExceptionSpecInfo::Type.
Referenced by InitMethodInstantiation(), and VisitFunctionDecl().
bool TemplateDeclInstantiator::InitMethodInstantiation | ( | CXXMethodDecl * | New, |
CXXMethodDecl * | Tmpl | ||
) |
Initializes common fields of an instantiated method declaration (New) from the corresponding fields of its template (Tmpl).
Definition at line 4027 of file SemaTemplateInstantiateDecl.cpp.
References clang::Sema::AdjustDestructorExceptionSpec(), clang::Decl::getAccess(), clang::Sema::getLangOpts(), InitFunctionInstantiation(), clang::FunctionDecl::isVirtualAsWritten(), clang::Decl::setAccess(), and clang::FunctionDecl::setVirtualAsWritten().
Referenced by VisitCXXMethodDecl().
ClassTemplatePartialSpecializationDecl * TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization | ( | ClassTemplateDecl * | ClassTemplate, |
ClassTemplatePartialSpecializationDecl * | PartialSpec | ||
) |
Instantiate the declaration of a class template partial specialization.
ClassTemplate | the (instantiated) class template that is partially |
PartialSpec | the (uninstantiated) class template partial specialization that we are instantiating. |
Definition at line 3476 of file SemaTemplateInstantiateDecl.cpp.
References clang::Sema::CheckTemplateArgumentList(), clang::Sema::CheckTemplatePartialSpecialization(), clang::Sema::CheckTemplatePartialSpecializationArgs(), clang::Sema::Context, clang::ClassTemplatePartialSpecializationDecl::Create(), clang::Sema::Diag(), clang::ClassTemplateDecl::findPartialSpecialization(), clang::TypeDecl::getBeginLoc(), clang::Decl::getLocation(), clang::TagDecl::getTagKind(), clang::ASTTemplateArgumentListInfo::getTemplateArgs(), clang::ClassTemplatePartialSpecializationDecl::getTemplateArgsAsWritten(), clang::ClassTemplatePartialSpecializationDecl::getTemplateParameters(), clang::ASTContext::getTemplateSpecializationType(), clang::ASTContext::getTemplateSpecializationTypeInfo(), clang::TypeSourceInfo::getType(), clang::ASTContext::getTypeDeclType(), clang::ASTTemplateArgumentListInfo::LAngleLoc, clang::ASTTemplateArgumentListInfo::NumTemplateArgs, clang::ASTTemplateArgumentListInfo::RAngleLoc, clang::ClassTemplatePartialSpecializationDecl::setInstantiatedFromMember(), clang::ClassTemplateSpecializationDecl::setTypeAsWritten(), clang::TemplateArgumentListInfo::size(), clang::Sema::Subst(), SubstQualifier(), and SubstTemplateParams().
Definition at line 1173 of file SemaTemplateInstantiateDecl.cpp.
References clang::Sema::ActOnEnumBody(), clang::DeclContext::addDecl(), clang::CXXScopeSpec::Adopt(), clang::Sema::CheckEnumConstant(), clang::Sema::CheckTemplateParameterList(), clang::Sema::computeDeclContext(), clang::Sema::ConstantEvaluated, clang::Sema::Context, clang::CXXRecordDecl::Create(), clang::ClassTemplateDecl::Create(), clang::Sema::CurrentInstantiationScope, clang::Sema::Diag(), clang::DeclContextLookupResult::empty(), clang::EnumDecl::enumerators(), clang::Sema::FindInstantiatedContext(), clang::Decl::FOK_None, clang::Sema::forRedeclarationInCurContext(), clang::DeclContextLookupResult::front(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Decl::getAccess(), clang::TypeDecl::getBeginLoc(), clang::TagDecl::getBraceRange(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::Decl::getFriendObjectKind(), clang::NamedDecl::getIdentifier(), getIdentifier(), clang::ClassTemplateDecl::getInjectedClassNameSpecialization(), clang::ASTContext::getInjectedClassNameType(), clang::Decl::getLexicalDeclContext(), clang::Decl::getLocation(), clang::ClassTemplateDecl::getMostRecentDecl(), clang::DeclContext::getParent(), getPreviousDeclForInstantiation(), clang::TagDecl::getQualifierLoc(), clang::NestedNameSpecifierLoc::getSourceRange(), clang::TagDecl::getTagKind(), clang::ClassTemplateDecl::getTemplatedDecl(), clang::TemplateDecl::getTemplateParameters(), clang::Sema::InstantiateAttrs(), clang::Sema::InstantiateAttrsForDecl(), clang::LocalInstantiationScope::InstantiatedLocal(), clang::DeclContext::isDependentContext(), clang::DeclContext::isFunctionOrMethod(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), isInvalid(), clang::DeclContext::isNamespace(), clang::Decl::isOutOfLine(), clang::EnumDecl::isScoped(), clang::IdentifierInfo::isStr(), clang::DeclContext::lookup(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupQualifiedName(), clang::DeclContext::makeDeclVisibleInContext(), clang::Decl::setAccess(), clang::CXXRecordDecl::setDescribedClassTemplate(), clang::RedeclarableTemplateDecl::setInstantiatedFromMemberTemplate(), clang::Decl::setInvalidDecl(), clang::Decl::setLexicalDeclContext(), clang::Decl::setLocation(), clang::Decl::setObjectOfFriendDecl(), clang::Redeclarable< decl_type >::setPreviousDecl(), clang::TagDecl::setQualifierInfo(), clang::TagDecl::startDefinition(), clang::Sema::SubstExpr(), clang::Sema::SubstNestedNameSpecifierLoc(), SubstTemplateParams(), clang::Sema::TemplateParameterListsAreEqual(), clang::Sema::TPC_ClassTemplate, and clang::Sema::TPL_TemplateMatch.
Referenced by clang::Sema::InstantiateEnum().
Decl * TemplateDeclInstantiator::InstantiateTypedefNameDecl | ( | TypedefNameDecl * | D, |
bool | IsTypeAlias | ||
) |
Definition at line 644 of file SemaTemplateInstantiateDecl.cpp.
References clang::DeclContext::addDecl(), clang::DecompositionDecl::bindings(), clang::Type::castAs(), clang::Sema::Context, clang::TypeAliasTemplateDecl::Create(), clang::TypedefDecl::Create(), clang::TypeAliasDecl::Create(), clang::BindingDecl::Create(), clang::Sema::CurrentInstantiationScope, clang::DeclContextLookupResult::empty(), clang::Sema::FindInstantiatedDecl(), clang::DeclContextLookupResult::front(), clang::Decl::getAccess(), clang::Type::getAs(), clang::TypeDecl::getBeginLoc(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::NamedDecl::getIdentifier(), clang::Decl::getLocation(), clang::QualType::getNonReferenceType(), getPreviousDeclForInstantiation(), clang::Sema::getSourceManager(), clang::Sema::getStdNamespace(), clang::TypeAliasTemplateDecl::getTemplatedDecl(), clang::TemplateDecl::getTemplateParameters(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::TypeSourceInfo::getType(), clang::TagDecl::getTypedefNameForAnonDecl(), clang::TypedefNameDecl::getTypeSourceInfo(), clang::DecltypeType::getUnderlyingExpr(), clang::TypedefNameDecl::getUnderlyingType(), clang::TagDecl::hasNameForLinkage(), clang::Sema::InstantiateAttrs(), clang::LocalInstantiationScope::InstantiatedLocal(), clang::ASTContext::IntTy, clang::Sema::isIncompatibleTypedef(), clang::Type::isInstantiationDependentType(), clang::SourceManager::isInSystemHeader(), clang::Decl::isReferenced(), clang::Type::isReferenceType(), clang::IdentifierInfo::isStr(), clang::Type::isVariablyModifiedType(), clang::DeclContext::lookup(), clang::Sema::MarkDeclarationsReferencedInType(), clang::Decl::setAccess(), clang::RedeclarableTemplateDecl::setInstantiatedFromMemberTemplate(), clang::Decl::setInvalidDecl(), clang::Redeclarable< decl_type >::setPreviousDecl(), clang::Decl::setReferenced(), clang::TagDecl::setTypedefNameForAnonDecl(), SubstTemplateParams(), clang::Sema::SubstType(), and VisitVarDecl().
VarTemplatePartialSpecializationDecl * TemplateDeclInstantiator::InstantiateVarTemplatePartialSpecialization | ( | VarTemplateDecl * | VarTemplate, |
VarTemplatePartialSpecializationDecl * | PartialSpec | ||
) |
Instantiate the declaration of a variable template partial specialization.
VarTemplate | the (instantiated) variable template that is partially specialized by the instantiation of PartialSpec . |
PartialSpec | the (uninstantiated) variable template partial specialization that we are instantiating. |
Definition at line 3603 of file SemaTemplateInstantiateDecl.cpp.
References clang::Sema::BuildVariableInstantiation(), clang::Sema::CheckTemplateArgumentList(), clang::Sema::CheckTemplatePartialSpecialization(), clang::Sema::CheckTemplatePartialSpecializationArgs(), clang::Sema::Context, clang::VarTemplatePartialSpecializationDecl::Create(), clang::Sema::Diag(), clang::VarTemplateDecl::findPartialSpecialization(), clang::NamedDecl::getDeclName(), clang::DeclaratorDecl::getInnerLocStart(), clang::Decl::getLocation(), clang::VarDecl::getStorageClass(), clang::ASTTemplateArgumentListInfo::getTemplateArgs(), clang::VarTemplatePartialSpecializationDecl::getTemplateArgsAsWritten(), clang::VarTemplatePartialSpecializationDecl::getTemplateParameters(), clang::ASTContext::getTemplateSpecializationType(), clang::ASTContext::getTemplateSpecializationTypeInfo(), clang::TypeSourceInfo::getType(), clang::DeclaratorDecl::getTypeSourceInfo(), clang::DeclaratorDecl::getTypeSpecStartLoc(), clang::Type::isFunctionType(), clang::VarDecl::isStaticDataMember(), clang::ASTTemplateArgumentListInfo::LAngleLoc, clang::ASTTemplateArgumentListInfo::NumTemplateArgs, clang::ASTTemplateArgumentListInfo::RAngleLoc, clang::VarTemplatePartialSpecializationDecl::setInstantiatedFromMember(), clang::VarTemplateSpecializationDecl::setTypeAsWritten(), clang::TemplateArgumentListInfo::size(), clang::Sema::Subst(), SubstQualifier(), SubstTemplateParams(), and clang::Sema::SubstType().
TypeSourceInfo * TemplateDeclInstantiator::SubstFunctionType | ( | FunctionDecl * | D, |
SmallVectorImpl< ParmVarDecl *> & | Params | ||
) |
Definition at line 3730 of file SemaTemplateInstantiateDecl.cpp.
References clang::Sema::BuildParmVarDeclForTypedef(), clang::TypeLoc::castAs(), clang::Sema::CurrentInstantiationScope, clang::TypeLoc::getAs(), clang::NamedDecl::getDeclName(), clang::Decl::getLocation(), clang::Sema::getNumArgumentsInExpansion(), clang::FunctionTypeLoc::getParam(), clang::FunctionProtoType::getParamType(), clang::ValueDecl::getType(), clang::TypeSourceInfo::getTypeLoc(), clang::DeclaratorDecl::getTypeSourceInfo(), clang::DeclaratorDecl::getTypeSpecStartLoc(), i, clang::TypeLoc::IgnoreParens(), clang::LocalInstantiationScope::InstantiatedLocal(), clang::LocalInstantiationScope::InstantiatedLocalPackArg(), clang::VarDecl::isParameterPack(), clang::LocalInstantiationScope::MakeInstantiatedLocalArgPack(), clang::FunctionDecl::parameters(), clang::Sema::SubstFunctionDeclType(), and clang::Sema::SubstParmTypes().
Referenced by VisitCXXMethodDecl(), and VisitFunctionDecl().
bool TemplateDeclInstantiator::SubstQualifier | ( | const DeclaratorDecl * | OldDecl, |
DeclaratorDecl * | NewDecl | ||
) |
Definition at line 67 of file SemaTemplateInstantiateDecl.cpp.
References SubstQualifier().
Referenced by InstantiateClassTemplatePartialSpecialization(), InstantiateVarTemplatePartialSpecialization(), VisitVarDecl(), and VisitVarTemplateSpecializationDecl().
Definition at line 72 of file SemaTemplateInstantiateDecl.cpp.
References SubstQualifier().
TemplateParameterList * TemplateDeclInstantiator::SubstTemplateParams | ( | TemplateParameterList * | L | ) |
Instantiates a nested template parameter list in the current instantiation context.
L | The parameter list to instantiate |
Definition at line 3428 of file SemaTemplateInstantiateDecl.cpp.
References clang::Sema::Context, clang::TemplateParameterList::Create(), clang::Decl::isInvalidDecl(), P, clang::TemplateParameterList::size(), and clang::declvisitor::Base< std::add_pointer, TemplateDeclInstantiator, Decl * >::Visit().
Referenced by InstantiateClassTemplatePartialSpecialization(), InstantiateEnumDefinition(), InstantiateTypedefNameDecl(), InstantiateVarTemplatePartialSpecialization(), clang::Sema::SubstTemplateParams(), and VisitCXXMethodDecl().
Decl * TemplateDeclInstantiator::VisitCXXMethodDecl | ( | CXXMethodDecl * | D, |
TemplateParameterList * | TemplateParams, | ||
Optional< const ASTTemplateArgumentListInfo *> | ClassScopeSpecializationArgs = llvm::None |
||
) |
Definition at line 1997 of file SemaTemplateInstantiateDecl.cpp.
References clang::LookupResult::addDecl(), clang::DeclContext::addDecl(), adjustFunctionTypeForInstantiation(), clang::CXXScopeSpec::Adopt(), clang::AS_public, clang::TypeLoc::castAs(), clang::Sema::CheckFriendAccess(), clang::Sema::CheckFunctionDeclaration(), clang::Sema::CheckFunctionTemplateSpecialization(), clang::Sema::CheckNonTypeTemplateParameterType(), clang::Sema::CheckOverrideControl(), clang::Sema::CheckPackExpansion(), clang::Sema::CheckParameterPacksForExpansion(), clang::Sema::CheckPureMethod(), clang::LookupResult::clear(), clang::Sema::collectUnexpandedParameterPacks(), clang::Sema::CompleteMemberSpecialization(), clang::Sema::computeDeclContext(), clang::Sema::ConstantEvaluated, clang::Sema::Context, clang::FunctionTemplateDecl::Create(), clang::TemplateTypeParmDecl::Create(), clang::NonTypeTemplateParmDecl::Create(), clang::CXXMethodDecl::Create(), clang::CXXConstructorDecl::Create(), clang::CXXDestructorDecl::Create(), clang::CXXConversionDecl::Create(), clang::TemplateArgumentList::CreateCopy(), clang::Sema::CurrentInstantiationScope, clang::TemplateTypeParmDecl::defaultArgumentWasInherited(), clang::NonTypeTemplateParmDecl::defaultArgumentWasInherited(), clang::LookupResult::empty(), clang::Sema::FindInstantiatedContext(), clang::Sema::FindInstantiatedDecl(), clang::FunctionTemplateDecl::findSpecialization(), clang::Decl::FOK_None, clang::Sema::ForExternalRedeclaration, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Decl::getAccess(), clang::TypeDecl::getBeginLoc(), clang::FunctionDecl::getConstexprKind(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::NonTypeTemplateParmDecl::getDefaultArgument(), clang::TemplateTypeParmDecl::getDefaultArgumentInfo(), clang::TemplateTypeParmDecl::getDefaultArgumentLoc(), clang::FunctionDecl::getDependentSpecializationInfo(), clang::TemplateParmPosition::getDepth(), clang::TemplateTypeParmDecl::getDepth(), clang::FunctionDecl::getDescribedFunctionTemplate(), clang::PackExpansionTypeLoc::getEllipsisLoc(), clang::Decl::getEndLoc(), clang::NonTypeTemplateParmDecl::getExpansionTypeSourceInfo(), clang::Decl::getFriendObjectKind(), clang::ExplicitSpecifier::getFromDecl(), clang::NamedDecl::getIdentifier(), clang::TemplateTypeParmDecl::getIndex(), clang::DeclaratorDecl::getInnerLocStart(), clang::MultiLevelTemplateArgumentList::getInnermost(), clang::Decl::getLexicalDeclContext(), clang::Decl::getLocation(), clang::FunctionDecl::getNameInfo(), clang::PackExpansionType::getNumExpansions(), clang::NonTypeTemplateParmDecl::getNumExpansionTypes(), clang::MultiLevelTemplateArgumentList::getNumSubstitutedLevels(), clang::DeclaratorDecl::getNumTemplateParameterLists(), clang::PackExpansionTypeLoc::getPatternLoc(), clang::TemplateParmPosition::getPosition(), clang::Redeclarable< decl_type >::getPreviousDecl(), clang::DeclaratorDecl::getQualifierLoc(), clang::DeclaratorDecl::getTemplateParameterList(), clang::FunctionDecl::getTemplateSpecializationArgsAsWritten(), clang::TypeSourceInfo::getType(), clang::TypeDecl::getTypeForDecl(), clang::TypeSourceInfo::getTypeLoc(), clang::ConcreteTypeLoc< Base, Derived, TypeClass, LocalData >::getTypePtr(), clang::DeclaratorDecl::getTypeSourceInfo(), clang::TemplateTypeParmDecl::hasDefaultArgument(), clang::NonTypeTemplateParmDecl::hasDefaultArgument(), InitMethodInstantiation(), clang::LocalInstantiationScope::InstantiatedLocal(), instantiateExplicitSpecifier(), clang::ASTContext::IntTy, clang::FunctionDecl::isDeletedAsWritten(), clang::NonTypeTemplateParmDecl::isExpandedParameterPack(), clang::FunctionDecl::isExplicitlyDefaulted(), clang::FunctionDecl::isInlined(), clang::FunctionDecl::isInlineSpecified(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::ExplicitSpecifier::isInvalid(), clang::QualType::isNull(), clang::FunctionDecl::isOutOfLine(), clang::NonTypeTemplateParmDecl::isPackExpansion(), clang::TemplateTypeParmDecl::isParameterPack(), clang::NonTypeTemplateParmDecl::isParameterPack(), clang::FunctionDecl::isPure(), clang::LookupResult::isSingleTagDecl(), clang::CXXMethodDecl::isStatic(), clang::Type::isTemplateTypeParmType(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupQualifiedName(), clang::DeclContext::makeDeclVisibleInContext(), clang::Sema::MarkFunctionReferenced(), clang::None, P, Previous, clang::Sema::RequireCompleteDeclContext(), clang::SC_None, clang::SC_Static, clang::Decl::setAccess(), clang::Sema::SetDeclDefaulted(), clang::Sema::SetDeclDeleted(), clang::FunctionDecl::setImplicitlyInline(), clang::Decl::setLexicalDeclContext(), clang::Decl::setObjectOfFriendDecl(), clang::FunctionDecl::setRangeEnd(), clang::Sema::Subst(), clang::Sema::SubstDeclarationNameInfo(), clang::Sema::SubstExpr(), SubstFunctionType(), clang::Sema::SubstNestedNameSpecifierLoc(), clang::Sema::SubstParmVarDecl(), SubstTemplateParams(), clang::Sema::SubstType(), clang::TSK_ImplicitInstantiation, and clang::TemplateTypeParmDecl::wasDeclaredWithTypename().
Definition at line 3408 of file SemaTemplateInstantiateDecl.cpp.
Decl * TemplateDeclInstantiator::VisitFunctionDecl | ( | FunctionDecl * | D, |
TemplateParameterList * | TemplateParams | ||
) |
Normal class members are of more specific types and therefore don't make it here.
This function serves three purposes: 1) instantiating function templates 2) substituting friend declarations 3) substituting deduction guide declarations for nested class templates
Definition at line 1698 of file SemaTemplateInstantiateDecl.cpp.
References clang::Sema::adjustContextForLocalExternDecl(), adjustFunctionTypeForInstantiation(), clang::CXXScopeSpec::Adopt(), clang::Sema::CheckForFunctionRedefinition(), clang::Sema::CheckFunctionDeclaration(), clang::Sema::CheckFunctionTemplateSpecialization(), clang::Sema::CheckTemplateParameterList(), clang::Sema::computeDeclContext(), clang::Sema::Context, clang::FunctionTemplateDecl::Create(), clang::FunctionDecl::Create(), clang::CXXDeductionGuideDecl::Create(), clang::TemplateArgumentList::CreateCopy(), clang::Sema::FindInstantiatedContext(), clang::Sema::FindInstantiatedDecl(), clang::FunctionTemplateDecl::findSpecialization(), clang::Decl::FOK_None, clang::Sema::ForExternalRedeclaration, clang::Sema::forRedeclarationInCurContext(), clang::Decl::getAccess(), clang::FunctionDecl::getCanonicalDecl(), clang::FunctionDecl::getConstexprKind(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::FunctionDecl::getDependentSpecializationInfo(), clang::FunctionDecl::getDescribedFunctionTemplate(), clang::SourceRange::getEnd(), clang::Decl::getFriendObjectKind(), clang::DeclaratorDecl::getInnerLocStart(), clang::MultiLevelTemplateArgumentList::getInnermost(), clang::Decl::getLocation(), clang::FunctionDecl::getMemberSpecializationInfo(), clang::FunctionDecl::getNameInfo(), clang::Redeclarable< decl_type >::getPreviousDecl(), clang::FunctionTemplateDecl::getPreviousDecl(), clang::DeclaratorDecl::getQualifierLoc(), clang::FunctionDecl::getSourceRange(), clang::FunctionDecl::getStorageClass(), clang::TemplateDecl::getTemplateParameters(), clang::FunctionDecl::getTemplateSpecializationArgsAsWritten(), clang::FunctionDecl::hasWrittenPrototype(), clang::Decl::IDNS_Ordinary, InitFunctionInstantiation(), instantiateExplicitSpecifier(), clang::FunctionDecl::isDefaulted(), clang::DeclContext::isFileContext(), clang::DeclContext::isFunctionOrMethod(), clang::Decl::isInIdentifierNamespace(), clang::FunctionDecl::isInlined(), clang::FunctionDecl::isInlineSpecified(), clang::ExplicitSpecifier::isInvalid(), clang::Decl::isInvalidDecl(), clang::Decl::isLocalExternDecl(), clang::FunctionDecl::isOutOfLine(), clang::FunctionDecl::isOverloadedOperator(), clang::DeclContext::isRecord(), clang::FunctionDecl::isThisDeclarationADefinition(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupQualifiedName(), clang::Sema::LookupRedeclarationWithLinkage, clang::DeclContext::makeDeclVisibleInContext(), P, clang::Sema::PendingLocalImplicitInstantiations, Previous, clang::Redeclarable< decl_type >::redecls(), clang::Decl::setAccess(), clang::FunctionDecl::setDescribedFunctionTemplate(), clang::FunctionDecl::setImplicitlyInline(), clang::RedeclarableTemplateDecl::setInstantiatedFromMemberTemplate(), clang::Decl::setInvalidDecl(), clang::CXXDeductionGuideDecl::setIsCopyDeductionCandidate(), clang::Decl::setLexicalDeclContext(), clang::Decl::setLocalExternDecl(), clang::Decl::setNonMemberOperator(), clang::Decl::setObjectOfFriendDecl(), clang::DeclaratorDecl::setQualifierInfo(), clang::FunctionDecl::setRangeEnd(), clang::Sema::Subst(), clang::Sema::SubstDeclarationNameInfo(), SubstFunctionType(), clang::Sema::SubstNestedNameSpecifierLoc(), clang::Sema::TPC_FriendFunctionTemplate, clang::Sema::TPC_FriendFunctionTemplateDefinition, and clang::TSK_ImplicitInstantiation.
Decl * TemplateDeclInstantiator::VisitVarDecl | ( | VarDecl * | D, |
bool | InstantiatingVarTemplate, | ||
ArrayRef< BindingDecl *> * | Bindings = nullptr |
||
) |
Definition at line 801 of file SemaTemplateInstantiateDecl.cpp.
References clang::DeclContext::addDecl(), clang::DeclContext::addHiddenDecl(), clang::Sema::adjustContextForLocalExternDecl(), clang::Sema::BuildVariableInstantiation(), clang::Sema::CES_Strict, clang::IndirectFieldDecl::chain(), clang::Sema::CheckAlignasUnderalignment(), clang::Sema::CheckFieldDecl(), clang::Sema::CheckStaticLocalForDllExport(), clang::Sema::ConstantEvaluated, clang::Sema::Context, clang::AccessSpecDecl::Create(), clang::VarDecl::Create(), clang::DecompositionDecl::Create(), clang::MSPropertyDecl::Create(), clang::Sema::CurrentInstantiationScope, clang::Sema::Diag(), clang::Decl::getAccess(), clang::AccessSpecDecl::getAccessSpecifierLoc(), clang::ActionResult< PtrTy, CompressInvalid >::getAs(), clang::DeclaratorDecl::getBeginLoc(), clang::FieldDecl::getBitWidth(), clang::IndirectFieldDecl::getChainingSize(), clang::AccessSpecDecl::getColonLoc(), clang::NamedDecl::getDeclName(), clang::MSPropertyDecl::getGetterId(), clang::NamedDecl::getIdentifier(), clang::FieldDecl::getInClassInitStyle(), clang::DeclaratorDecl::getInnerLocStart(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::MSPropertyDecl::getSetterId(), clang::VarDecl::getStorageClass(), clang::TypeSourceInfo::getType(), clang::DeclaratorDecl::getTypeSourceInfo(), clang::DeclaratorDecl::getTypeSpecStartLoc(), i, clang::Sema::inferObjCARCLifetime(), clang::Sema::InstantiateAttrs(), clang::LocalInstantiationScope::InstantiatedLocal(), clang::Sema::isCopyElisionCandidate(), clang::Type::isFunctionType(), clang::Decl::isImplicit(), clang::Type::isInstantiationDependentType(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::Decl::isLocalExternDecl(), clang::FieldDecl::isMutable(), clang::VarDecl::isNRVOVariable(), clang::VarDecl::isStaticDataMember(), clang::Type::isVariablyModifiedType(), clang::Sema::MarkDeclarationsReferencedInType(), Parent, clang::Property, clang::Decl::setAccess(), clang::ASTContext::setInstantiatedFromUnnamedFieldDecl(), clang::Decl::setInvalidDecl(), clang::Sema::SubstExpr(), SubstQualifier(), and clang::Sema::SubstType().
Referenced by InstantiateTypedefNameDecl().
Decl * TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl | ( | VarTemplateDecl * | VarTemplate, |
VarDecl * | FromVar, | ||
void * | InsertPos, | ||
const TemplateArgumentListInfo & | TemplateArgsInfo, | ||
ArrayRef< TemplateArgument > | Converted, | ||
VarTemplateSpecializationDecl * | PrevDecl = nullptr |
||
) |
Definition at line 3305 of file SemaTemplateInstantiateDecl.cpp.
References clang::VarTemplateDecl::AddSpecialization(), clang::Sema::BuildVariableInstantiation(), clang::Sema::CheckSpecializationInstantiationRedecl(), clang::Sema::CheckTemplateArgumentList(), clang::Sema::Context, clang::VarTemplateSpecializationDecl::Create(), clang::Sema::Diag(), clang::DiagnosticsEngine::Error, clang::Sema::FindInstantiatedDecl(), clang::VarTemplateDecl::findSpecialization(), clang::TemplateArgumentListInfo::getArgumentArray(), clang::DiagnosticsEngine::getCustomDiagID(), clang::Decl::getDeclKindName(), clang::NamedDecl::getDeclName(), clang::Sema::getDiagnostics(), clang::DeclaratorDecl::getInnerLocStart(), clang::TemplateArgumentListInfo::getLAngleLoc(), clang::Decl::getLocation(), clang::VarTemplateSpecializationDecl::getPointOfInstantiation(), clang::TemplateArgumentListInfo::getRAngleLoc(), clang::VarTemplateSpecializationDecl::getSpecializationKind(), clang::VarTemplateSpecializationDecl::getSpecializedTemplate(), clang::VarDecl::getStorageClass(), clang::VarTemplateSpecializationDecl::getTemplateArgsInfo(), clang::TypeSourceInfo::getType(), clang::DeclaratorDecl::getTypeSourceInfo(), clang::DeclaratorDecl::getTypeSpecStartLoc(), clang::Type::isFunctionType(), clang::VarDecl::isStaticDataMember(), clang::TemplateArgumentListInfo::setLAngleLoc(), clang::TemplateArgumentListInfo::setRAngleLoc(), clang::VarTemplateSpecializationDecl::setTemplateArgsInfo(), clang::TemplateArgumentListInfo::size(), clang::Sema::Subst(), SubstQualifier(), and clang::Sema::SubstType().