diff options
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) {  | 
