diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/AST/DeclTemplate.h | 39 | ||||
-rw-r--r-- | clang/include/clang/Basic/Specifiers.h | 19 |
2 files changed, 25 insertions, 33 deletions
diff --git a/clang/include/clang/AST/DeclTemplate.h b/clang/include/clang/AST/DeclTemplate.h index a23fe4b5e52..8d62b237483 100644 --- a/clang/include/clang/AST/DeclTemplate.h +++ b/clang/include/clang/AST/DeclTemplate.h @@ -448,17 +448,8 @@ public: /// explicit instantiation declaration, or explicit instantiation /// definition. bool isExplicitInstantiationOrSpecialization() const { - switch (getTemplateSpecializationKind()) { - case TSK_ExplicitSpecialization: - case TSK_ExplicitInstantiationDeclaration: - case TSK_ExplicitInstantiationDefinition: - return true; - - case TSK_Undeclared: - case TSK_ImplicitInstantiation: - return false; - } - llvm_unreachable("bad template specialization kind"); + return isTemplateExplicitInstantiationOrSpecialization( + getTemplateSpecializationKind()); } /// \brief Set the template specialization kind. @@ -1644,17 +1635,8 @@ public: /// explicit instantiation declaration, or explicit instantiation /// definition. bool isExplicitInstantiationOrSpecialization() const { - switch (getTemplateSpecializationKind()) { - case TSK_ExplicitSpecialization: - case TSK_ExplicitInstantiationDeclaration: - case TSK_ExplicitInstantiationDefinition: - return true; - - case TSK_Undeclared: - case TSK_ImplicitInstantiation: - return false; - } - llvm_unreachable("bad template specialization kind"); + return isTemplateExplicitInstantiationOrSpecialization( + getTemplateSpecializationKind()); } void setSpecializationKind(TemplateSpecializationKind TSK) { @@ -2499,17 +2481,8 @@ public: /// explicit instantiation declaration, or explicit instantiation /// definition. bool isExplicitInstantiationOrSpecialization() const { - switch (getTemplateSpecializationKind()) { - case TSK_ExplicitSpecialization: - case TSK_ExplicitInstantiationDeclaration: - case TSK_ExplicitInstantiationDefinition: - return true; - - case TSK_Undeclared: - case TSK_ImplicitInstantiation: - return false; - } - llvm_unreachable("bad template specialization kind"); + return isTemplateExplicitInstantiationOrSpecialization( + getTemplateSpecializationKind()); } void setSpecializationKind(TemplateSpecializationKind TSK) { diff --git a/clang/include/clang/Basic/Specifiers.h b/clang/include/clang/Basic/Specifiers.h index e5f1f834f75..1d59d64d6bc 100644 --- a/clang/include/clang/Basic/Specifiers.h +++ b/clang/include/clang/Basic/Specifiers.h @@ -18,6 +18,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Support/DataTypes.h" +#include "llvm/Support/ErrorHandling.h" namespace clang { /// \brief Specifies the width of a type, e.g., short, long, or long long. @@ -157,6 +158,24 @@ namespace clang { return Kind != TSK_Undeclared && Kind != TSK_ExplicitSpecialization; } + /// \brief True if this template specialization kind is an explicit + /// specialization, explicit instantiation declaration, or explicit + /// instantiation definition. + inline bool isTemplateExplicitInstantiationOrSpecialization( + TemplateSpecializationKind Kind) { + switch (Kind) { + case TSK_ExplicitSpecialization: + case TSK_ExplicitInstantiationDeclaration: + case TSK_ExplicitInstantiationDefinition: + return true; + + case TSK_Undeclared: + case TSK_ImplicitInstantiation: + return false; + } + llvm_unreachable("bad template specialization kind"); + } + /// \brief Thread storage-class-specifier. enum ThreadStorageClassSpecifier { TSCS_unspecified, |