Author: rnk Date: Mon Oct 3 13:34:23 2016 New Revision: 283131 URL: http://llvm.org/viewvc/llvm-project?rev=283131&view=rev Log: Factor out a diagnostic kind enum for use in two %select expressions
NFC Modified: cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/lib/Sema/TreeTransform.h Modified: cfe/trunk/include/clang/Sema/Sema.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=283131&r1=283130&r2=283131&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/Sema.h (original) +++ cfe/trunk/include/clang/Sema/Sema.h Mon Oct 3 13:34:23 2016 @@ -1970,6 +1970,21 @@ public: Decl *BuildMicrosoftCAnonymousStruct(Scope *S, DeclSpec &DS, RecordDecl *Record); + /// Common ways to introduce type names without a tag for use in diagnostics. + /// Keep in sync with err_tag_reference_non_tag. + enum NonTagKind { + NTK_Unknown, + NTK_Typedef, + NTK_TypeAlias, + NTK_Template, + NTK_TypeAliasTemplate, + NTK_TemplateTemplateArgument, + }; + + /// Given a non-tag type declaration, returns an enum useful for indicating + /// what kind of non-tag type this is. + NonTagKind getNonTagTypeDeclKind(const Decl *D); + bool isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=283131&r1=283130&r2=283131&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Oct 3 13:34:23 2016 @@ -12243,6 +12243,20 @@ static bool isClassCompatTagKind(TagType 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 // (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 // 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; Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=283131&r1=283130&r2=283131&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Mon Oct 3 13:34:23 2016 @@ -2468,7 +2468,7 @@ TypeResult Sema::ActOnTagTemplateIdType( // If the identifier resolves to a typedef-name or the simple-template-id // resolves to an alias template specialization, the // elaborated-type-specifier is ill-formed. - Diag(TemplateLoc, diag::err_tag_reference_non_tag) << 4; + Diag(TemplateLoc, diag::err_tag_reference_non_tag) << NTK_TypeAliasTemplate; Diag(TAT->getLocation(), diag::note_declared_at); } @@ -7438,14 +7438,8 @@ Sema::ActOnExplicitInstantiation(Scope * ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(TD); if (!ClassTemplate) { - unsigned ErrorKind = 0; - if (isa<TypeAliasTemplateDecl>(TD)) { - ErrorKind = 4; - } else if (isa<TemplateTemplateParmDecl>(TD)) { - ErrorKind = 5; - } - - Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << ErrorKind; + NonTagKind NTK = getNonTagTypeDeclKind(TD); + Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << NTK; Diag(TD->getLocation(), diag::note_previous_use); return true; } Modified: cfe/trunk/lib/Sema/TreeTransform.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=283131&r1=283130&r2=283131&view=diff ============================================================================== --- cfe/trunk/lib/Sema/TreeTransform.h (original) +++ cfe/trunk/lib/Sema/TreeTransform.h Mon Oct 3 13:34:23 2016 @@ -1013,11 +1013,8 @@ public: case LookupResult::FoundOverloaded: case LookupResult::FoundUnresolvedValue: { NamedDecl *SomeDecl = Result.getRepresentativeDecl(); - unsigned Kind = 0; - if (isa<TypedefDecl>(SomeDecl)) Kind = 1; - else if (isa<TypeAliasDecl>(SomeDecl)) Kind = 2; - else if (isa<ClassTemplateDecl>(SomeDecl)) Kind = 3; - SemaRef.Diag(IdLoc, diag::err_tag_reference_non_tag) << Kind; + Sema::NonTagKind NTK = SemaRef.getNonTagTypeDeclKind(SomeDecl); + SemaRef.Diag(IdLoc, diag::err_tag_reference_non_tag) << NTK; SemaRef.Diag(SomeDecl->getLocation(), diag::note_declared_at); break; } @@ -5703,7 +5700,8 @@ TreeTransform<Derived>::TransformElabora if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>( Template.getAsTemplateDecl())) { SemaRef.Diag(TL.getNamedTypeLoc().getBeginLoc(), - diag::err_tag_reference_non_tag) << 4; + diag::err_tag_reference_non_tag) + << Sema::NTK_TypeAliasTemplate; SemaRef.Diag(TAT->getLocation(), diag::note_declared_at); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits