diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-06-01 20:58:49 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-06-01 20:58:49 +0000 | 
| commit | 416ada0f75bab22b084a1776deb229cd4a669c4d (patch) | |
| tree | 6eb65f3790434471361628af6199b07a4de92de7 /lib/AST/ODRHash.cpp | |
| parent | 550ae89a710bf458d47e5b1d183f5e7039c2b384 (diff) | |
Diffstat (limited to 'lib/AST/ODRHash.cpp')
| -rw-r--r-- | lib/AST/ODRHash.cpp | 28 | 
1 files changed, 27 insertions, 1 deletions
diff --git a/lib/AST/ODRHash.cpp b/lib/AST/ODRHash.cpp index 24371db64d07f..0e822ce35b8ce 100644 --- a/lib/AST/ODRHash.cpp +++ b/lib/AST/ODRHash.cpp @@ -110,7 +110,24 @@ void ODRHash::AddNestedNameSpecifier(const NestedNameSpecifier *NNS) {    }  } -void ODRHash::AddTemplateName(TemplateName Name) {} +void ODRHash::AddTemplateName(TemplateName Name) { +  auto Kind = Name.getKind(); +  ID.AddInteger(Kind); + +  switch (Kind) { +  case TemplateName::Template: +    AddDecl(Name.getAsTemplateDecl()); +    break; +  // TODO: Support these cases. +  case TemplateName::OverloadedTemplate: +  case TemplateName::QualifiedTemplate: +  case TemplateName::DependentTemplate: +  case TemplateName::SubstTemplateTemplateParm: +  case TemplateName::SubstTemplateTemplateParmPack: +    break; +  } +} +  void ODRHash::AddTemplateArgument(TemplateArgument TA) {}  void ODRHash::AddTemplateParameterList(const TemplateParameterList *TPL) {} @@ -492,6 +509,15 @@ public:      AddQualType(T->getNamedType());      VisitTypeWithKeyword(T);    } + +  void VisitTemplateSpecializationType(const TemplateSpecializationType *T) { +    ID.AddInteger(T->getNumArgs()); +    for (const auto &TA : T->template_arguments()) { +      Hash.AddTemplateArgument(TA); +    } +    Hash.AddTemplateName(T->getTemplateName()); +    VisitType(T); +  }  };  void ODRHash::AddType(const Type *T) {  | 
