diff options
author | Reid Kleckner <rnk@google.com> | 2016-10-03 18:34:23 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2016-10-03 18:34:23 +0000 |
commit | f33bfcb0e0b0764a26294b9cd40bd459081916b3 (patch) | |
tree | b1f4a52539ed21c8569bdc8ce66215dad99a798f /clang/lib/Sema/SemaDecl.cpp | |
parent | 691e2e020b1b67defd5c2a3f7c5cf0d76056b10a (diff) | |
download | bcm5719-llvm-f33bfcb0e0b0764a26294b9cd40bd459081916b3.tar.gz bcm5719-llvm-f33bfcb0e0b0764a26294b9cd40bd459081916b3.zip |
Factor out a diagnostic kind enum for use in two %select expressions
NFC
llvm-svn: 283131
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index d85a612e0b7..21778e8b62c 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -12243,6 +12243,20 @@ static bool isClassCompatTagKind(TagTypeKind Tag) return Tag == TTK_Struct || Tag == TTK_Class || Tag == TTK_Interface; } +Sema::NonTagKind Sema::getNonTagTypeDeclKind(const Decl *PrevDecl) { + if (isa<TypedefDecl>(PrevDecl)) + return NTK_Typedef; + else if (isa<TypeAliasDecl>(PrevDecl)) + return NTK_TypeAlias; + else if (isa<ClassTemplateDecl>(PrevDecl)) + return NTK_Template; + else if (isa<TypeAliasTemplateDecl>(PrevDecl)) + return NTK_TypeAliasTemplate; + else if (isa<TemplateTemplateParmDecl>(PrevDecl)) + return NTK_TemplateTemplateArgument; + return NTK_Unknown; +} + /// \brief Determine whether a tag with a given kind is acceptable /// as a redeclaration of the given tag declaration. /// @@ -13023,11 +13037,8 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, // (non-redeclaration) lookup. if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) { - unsigned Kind = 0; - if (isa<TypedefDecl>(PrevDecl)) Kind = 1; - else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2; - else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3; - Diag(NameLoc, diag::err_tag_reference_non_tag) << Kind; + NonTagKind NTK = getNonTagTypeDeclKind(PrevDecl); + Diag(NameLoc, diag::err_tag_reference_non_tag) << NTK; Diag(PrevDecl->getLocation(), diag::note_declared_at); Invalid = true; @@ -13038,11 +13049,8 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, // Diagnose implicit declarations introduced by elaborated types. } else if (TUK == TUK_Reference || TUK == TUK_Friend) { - unsigned Kind = 0; - if (isa<TypedefDecl>(PrevDecl)) Kind = 1; - else if (isa<TypeAliasDecl>(PrevDecl)) Kind = 2; - else if (isa<ClassTemplateDecl>(PrevDecl)) Kind = 3; - Diag(NameLoc, diag::err_tag_reference_conflict) << Kind; + NonTagKind NTK = getNonTagTypeDeclKind(PrevDecl); + Diag(NameLoc, diag::err_tag_reference_conflict) << NTK; Diag(PrevDecl->getLocation(), diag::note_previous_decl) << PrevDecl; Invalid = true; |