Rudimentary checking of template arguments against their corresponding
template parameters when performing semantic analysis of a template-id
naming a class template specialization.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64185 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index ca4c528..353f891 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -62,6 +62,7 @@
   class TypedefDecl;
   class TemplateDecl;
   class TemplateParameterList;
+  class TemplateTemplateParmDecl;
   class ObjCInterfaceDecl;
   class ObjCCompatibleAliasDecl;
   class ObjCProtocolDecl;
@@ -1515,12 +1516,25 @@
                      MultiTemplateParamsArg TemplateParameterLists);
 
   virtual TypeTy * 
-  ActOnClassTemplateSpecialization(DeclTy *Template,
+  ActOnClassTemplateSpecialization(DeclTy *Template, 
+                                   SourceLocation TemplateLoc,
                                    SourceLocation LAngleLoc,
                                    ASTTemplateArgsPtr TemplateArgs,
+                                   SourceLocation *TemplateArgLocs,
                                    SourceLocation RAngleLoc,
                                    const CXXScopeSpec *SS = 0);
 
+  bool CheckTemplateArgumentList(TemplateDecl *Template,
+                                 SourceLocation TemplateLoc,
+                                 SourceLocation LAngleLoc,
+                                 ASTTemplateArgsPtr& TemplateArgs,
+                                 SourceLocation *TemplateArgLocs,
+                                 SourceLocation RAngleLoc);
+
+  bool CheckTemplateArgument(TemplateTypeParmDecl *Param, QualType Arg,
+                             SourceLocation ArgLoc);
+  bool CheckTemplateArgument(NonTypeTemplateParmDecl *Param, Expr *Arg);
+  bool CheckTemplateArgument(TemplateTemplateParmDecl *Param, DeclRefExpr *Arg);
   bool TemplateParameterListsAreEqual(TemplateParameterList *New,
                                       TemplateParameterList *Old,
                                       bool Complain,