diff options
Diffstat (limited to 'clang/lib/AST/DeclTemplate.cpp')
-rw-r--r-- | clang/lib/AST/DeclTemplate.cpp | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/clang/lib/AST/DeclTemplate.cpp b/clang/lib/AST/DeclTemplate.cpp index 5035f2d..bc4a299 100644 --- a/clang/lib/AST/DeclTemplate.cpp +++ b/clang/lib/AST/DeclTemplate.cpp @@ -162,6 +162,7 @@ void TemplateParameterList::Profile(llvm::FoldingSetNodeID &ID, } const auto *TTP = cast<TemplateTemplateParmDecl>(D); ID.AddInteger(2); + ID.AddInteger(TTP->templateParameterKind()); ID.AddBoolean(TTP->isParameterPack()); TTP->getTemplateParameters()->Profile(ID, C); } @@ -184,7 +185,8 @@ unsigned TemplateParameterList::getMinRequiredArguments() const { } else if (const auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(P)) { if (NTTP->hasDefaultArgument()) break; - } else if (cast<TemplateTemplateParmDecl>(P)->hasDefaultArgument()) + } else if (const auto *TTP = dyn_cast<TemplateTemplateParmDecl>(P); + TTP && TTP->hasDefaultArgument()) break; ++NumRequiredArgs; @@ -873,38 +875,40 @@ void TemplateTemplateParmDecl::anchor() {} TemplateTemplateParmDecl::TemplateTemplateParmDecl( DeclContext *DC, SourceLocation L, unsigned D, unsigned P, - IdentifierInfo *Id, bool Typename, TemplateParameterList *Params, - ArrayRef<TemplateParameterList *> Expansions) + IdentifierInfo *Id, TemplateNameKind Kind, bool Typename, + TemplateParameterList *Params, ArrayRef<TemplateParameterList *> Expansions) : TemplateDecl(TemplateTemplateParm, DC, L, Id, Params), - TemplateParmPosition(D, P), Typename(Typename), ParameterPack(true), - ExpandedParameterPack(true), NumExpandedParams(Expansions.size()) { + TemplateParmPosition(D, P), ParameterKind(Kind), Typename(Typename), + ParameterPack(true), ExpandedParameterPack(true), + NumExpandedParams(Expansions.size()) { llvm::uninitialized_copy(Expansions, getTrailingObjects()); } -TemplateTemplateParmDecl * -TemplateTemplateParmDecl::Create(const ASTContext &C, DeclContext *DC, - SourceLocation L, unsigned D, unsigned P, - bool ParameterPack, IdentifierInfo *Id, - bool Typename, TemplateParameterList *Params) { +TemplateTemplateParmDecl *TemplateTemplateParmDecl::Create( + const ASTContext &C, DeclContext *DC, SourceLocation L, unsigned D, + unsigned P, bool ParameterPack, IdentifierInfo *Id, TemplateNameKind Kind, + bool Typename, TemplateParameterList *Params) { return new (C, DC) TemplateTemplateParmDecl(DC, L, D, P, ParameterPack, Id, - Typename, Params); + Kind, Typename, Params); } TemplateTemplateParmDecl * TemplateTemplateParmDecl::Create(const ASTContext &C, DeclContext *DC, SourceLocation L, unsigned D, unsigned P, - IdentifierInfo *Id, bool Typename, - TemplateParameterList *Params, + IdentifierInfo *Id, TemplateNameKind Kind, + bool Typename, TemplateParameterList *Params, ArrayRef<TemplateParameterList *> Expansions) { return new (C, DC, additionalSizeToAlloc<TemplateParameterList *>(Expansions.size())) - TemplateTemplateParmDecl(DC, L, D, P, Id, Typename, Params, Expansions); + TemplateTemplateParmDecl(DC, L, D, P, Id, Kind, Typename, Params, + Expansions); } TemplateTemplateParmDecl * TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, GlobalDeclID ID) { - return new (C, ID) TemplateTemplateParmDecl(nullptr, SourceLocation(), 0, 0, - false, nullptr, false, nullptr); + return new (C, ID) TemplateTemplateParmDecl( + nullptr, SourceLocation(), 0, 0, false, nullptr, + TemplateNameKind::TNK_Type_template, false, nullptr); } TemplateTemplateParmDecl * @@ -913,7 +917,8 @@ TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, GlobalDeclID ID, auto *TTP = new (C, ID, additionalSizeToAlloc<TemplateParameterList *>(NumExpansions)) TemplateTemplateParmDecl(nullptr, SourceLocation(), 0, 0, nullptr, - false, nullptr, {}); + TemplateNameKind::TNK_Type_template, false, + nullptr, {}); TTP->NumExpandedParams = NumExpansions; return TTP; } |