@@ -364,9 +364,6 @@ class ASTContext : public RefCountedBase<ASTContext> {
364364 const ASTContext&>
365365 CanonTemplateTemplateParms;
366366
367- TemplateTemplateParmDecl *
368- getCanonicalTemplateTemplateParmDecl (TemplateTemplateParmDecl *TTP) const ;
369-
370367 // / The typedef for the __int128_t type.
371368 mutable TypedefDecl *Int128Decl = nullptr ;
372369
@@ -1808,22 +1805,26 @@ class ASTContext : public RefCountedBase<ASTContext> {
18081805 bool ParameterPack,
18091806 TemplateTypeParmDecl *ParmDecl = nullptr ) const ;
18101807
1811- QualType getTemplateSpecializationType (TemplateName T,
1812- ArrayRef<TemplateArgument> Args,
1813- QualType Canon = QualType()) const ;
1808+ QualType getCanonicalTemplateSpecializationType (
1809+ TemplateName T, ArrayRef<TemplateArgument> CanonicalArgs) const ;
18141810
18151811 QualType
1816- getCanonicalTemplateSpecializationType (TemplateName T,
1817- ArrayRef<TemplateArgument> Args) const ;
1812+ getTemplateSpecializationType (TemplateName T,
1813+ ArrayRef<TemplateArgument> SpecifiedArgs,
1814+ ArrayRef<TemplateArgument> CanonicalArgs,
1815+ QualType Underlying = QualType()) const ;
18181816
1819- QualType getTemplateSpecializationType (TemplateName T,
1820- ArrayRef<TemplateArgumentLoc> Args,
1821- QualType Canon = QualType()) const ;
1817+ QualType
1818+ getTemplateSpecializationType (TemplateName T,
1819+ ArrayRef<TemplateArgumentLoc> SpecifiedArgs,
1820+ ArrayRef<TemplateArgument> CanonicalArgs,
1821+ QualType Canon = QualType()) const ;
18221822
1823- TypeSourceInfo *
1824- getTemplateSpecializationTypeInfo (TemplateName T, SourceLocation TLoc,
1825- const TemplateArgumentListInfo &Args,
1826- QualType Canon = QualType()) const ;
1823+ TypeSourceInfo *getTemplateSpecializationTypeInfo (
1824+ TemplateName T, SourceLocation TLoc,
1825+ const TemplateArgumentListInfo &SpecifiedArgs,
1826+ ArrayRef<TemplateArgument> CanonicalArgs,
1827+ QualType Canon = QualType()) const ;
18271828
18281829 QualType getParenType (QualType NamedType) const ;
18291830
@@ -2939,6 +2940,21 @@ class ASTContext : public RefCountedBase<ASTContext> {
29392940 TemplateArgument getCanonicalTemplateArgument (const TemplateArgument &Arg)
29402941 const ;
29412942
2943+ // / Canonicalize the given template argument list.
2944+ // /
2945+ // / Returns true if any arguments were non-canonical, false otherwise.
2946+ bool
2947+ canonicalizeTemplateArguments (MutableArrayRef<TemplateArgument> Args) const ;
2948+
2949+ // / Canonicalize the given TemplateTemplateParmDecl.
2950+ TemplateTemplateParmDecl *
2951+ getCanonicalTemplateTemplateParmDecl (TemplateTemplateParmDecl *TTP) const ;
2952+
2953+ TemplateTemplateParmDecl *findCanonicalTemplateTemplateParmDeclInternal (
2954+ TemplateTemplateParmDecl *TTP) const ;
2955+ TemplateTemplateParmDecl *insertCanonicalTemplateTemplateParmDeclInternal (
2956+ TemplateTemplateParmDecl *CanonTTP) const ;
2957+
29422958 // / Type Query functions. If the type is an instance of the specified class,
29432959 // / return the Type pointer for the underlying maximally pretty type. This
29442960 // / is a member of ASTContext because this may need to do some amount of
0 commit comments