Author: Vlad Serebrennikov Date: 2025-05-02T07:56:57+03:00 New Revision: 7e71db8463adfbaadbd28a6c0e8b807ff7075c3c
URL: https://github.com/llvm/llvm-project/commit/7e71db8463adfbaadbd28a6c0e8b807ff7075c3c DIFF: https://github.com/llvm/llvm-project/commit/7e71db8463adfbaadbd28a6c0e8b807ff7075c3c.diff LOG: [clang][NFC] Convert `Sema::AvailabilityMergeKind` to scoped enum Added: Modified: clang/include/clang/Sema/Sema.h clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaDeclAttr.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index d874adf0643f1..39702f1534e4a 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -619,6 +619,25 @@ enum class OffsetOfKind { Macro, }; +/// Describes the kind of merge to perform for availability +/// attributes (including "deprecated", "unavailable", and "availability"). +enum class AvailabilityMergeKind { + /// Don't merge availability attributes at all. + None, + /// Merge availability attributes for a redeclaration, which requires + /// an exact match. + Redeclaration, + /// Merge availability attributes for an override, which requires + /// an exact match or a weakening of constraints. + Override, + /// Merge availability attributes for an implementation of + /// a protocol requirement. + ProtocolImplementation, + /// Merge availability attributes for an implementation of + /// an optional protocol requirement. + OptionalProtocolImplementation +}; + /// Sema - This implements semantic analysis and AST building for C. /// \nosubgrouping class Sema final : public SemaBase { @@ -4176,28 +4195,10 @@ class Sema final : public SemaBase { TypeSourceInfo *TInfo); bool isIncompatibleTypedef(const TypeDecl *Old, TypedefNameDecl *New); - /// Describes the kind of merge to perform for availability - /// attributes (including "deprecated", "unavailable", and "availability"). - enum AvailabilityMergeKind { - /// Don't merge availability attributes at all. - AMK_None, - /// Merge availability attributes for a redeclaration, which requires - /// an exact match. - AMK_Redeclaration, - /// Merge availability attributes for an override, which requires - /// an exact match or a weakening of constraints. - AMK_Override, - /// Merge availability attributes for an implementation of - /// a protocol requirement. - AMK_ProtocolImplementation, - /// Merge availability attributes for an implementation of - /// an optional protocol requirement. - AMK_OptionalProtocolImplementation - }; - /// mergeDeclAttributes - Copy attributes from the Old decl to the New one. - void mergeDeclAttributes(NamedDecl *New, Decl *Old, - AvailabilityMergeKind AMK = AMK_Redeclaration); + void mergeDeclAttributes( + NamedDecl *New, Decl *Old, + AvailabilityMergeKind AMK = AvailabilityMergeKind::Redeclaration); /// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the /// same name and scope as a previous declaration 'Old'. Figure out diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 22a8b19807a10..17312864194a0 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -2800,7 +2800,7 @@ static bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) { static bool mergeDeclAttribute(Sema &S, NamedDecl *D, const InheritableAttr *Attr, - Sema::AvailabilityMergeKind AMK) { + AvailabilityMergeKind AMK) { // Diagnose any mutual exclusions between the attribute that we want to add // and attributes that already exist on the declaration. if (!DiagnoseMutualExclusions(S, D, Attr)) @@ -2865,9 +2865,9 @@ static bool mergeDeclAttribute(Sema &S, NamedDecl *D, // such attributes on a declaration at the same time. NewAttr = nullptr; else if ((isa<DeprecatedAttr>(Attr) || isa<UnavailableAttr>(Attr)) && - (AMK == Sema::AMK_Override || - AMK == Sema::AMK_ProtocolImplementation || - AMK == Sema::AMK_OptionalProtocolImplementation)) + (AMK == AvailabilityMergeKind::Override || + AMK == AvailabilityMergeKind::ProtocolImplementation || + AMK == AvailabilityMergeKind::OptionalProtocolImplementation)) NewAttr = nullptr; else if (const auto *UA = dyn_cast<UuidAttr>(Attr)) NewAttr = S.mergeUuidAttr(D, *UA, UA->getGuid(), UA->getGuidDecl()); @@ -3243,18 +3243,18 @@ void Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, for (auto *I : Old->specific_attrs<InheritableAttr>()) { // Ignore deprecated/unavailable/availability attributes if requested. - AvailabilityMergeKind LocalAMK = AMK_None; + AvailabilityMergeKind LocalAMK = AvailabilityMergeKind::None; if (isa<DeprecatedAttr>(I) || isa<UnavailableAttr>(I) || isa<AvailabilityAttr>(I)) { switch (AMK) { - case AMK_None: + case AvailabilityMergeKind::None: continue; - case AMK_Redeclaration: - case AMK_Override: - case AMK_ProtocolImplementation: - case AMK_OptionalProtocolImplementation: + case AvailabilityMergeKind::Redeclaration: + case AvailabilityMergeKind::Override: + case AvailabilityMergeKind::ProtocolImplementation: + case AvailabilityMergeKind::OptionalProtocolImplementation: LocalAMK = AMK; break; } @@ -4387,10 +4387,12 @@ void Sema::mergeObjCMethodDecls(ObjCMethodDecl *newMethod, // Merge the attributes, including deprecated/unavailable AvailabilityMergeKind MergeKind = isa<ObjCProtocolDecl>(oldMethod->getDeclContext()) - ? (oldMethod->isOptional() ? AMK_OptionalProtocolImplementation - : AMK_ProtocolImplementation) - : isa<ObjCImplDecl>(newMethod->getDeclContext()) ? AMK_Redeclaration - : AMK_Override; + ? (oldMethod->isOptional() + ? AvailabilityMergeKind::OptionalProtocolImplementation + : AvailabilityMergeKind::ProtocolImplementation) + : isa<ObjCImplDecl>(newMethod->getDeclContext()) + ? AvailabilityMergeKind::Redeclaration + : AvailabilityMergeKind::Override; mergeDeclAttributes(newMethod, oldMethod, MergeKind); diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 9d6a1c77f5aaf..d9d535c22fc40 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -2188,14 +2188,14 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr( bool FoundAny = false; bool OverrideOrImpl = false; switch (AMK) { - case AMK_None: - case AMK_Redeclaration: + case AvailabilityMergeKind::None: + case AvailabilityMergeKind::Redeclaration: OverrideOrImpl = false; break; - case AMK_Override: - case AMK_ProtocolImplementation: - case AMK_OptionalProtocolImplementation: + case AvailabilityMergeKind::Override: + case AvailabilityMergeKind::ProtocolImplementation: + case AvailabilityMergeKind::OptionalProtocolImplementation: OverrideOrImpl = true; break; } @@ -2268,9 +2268,10 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr( if (Which == -1) { Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override_unavail) - << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) - << (AMK == AMK_Override); - } else if (Which != 1 && AMK == AMK_OptionalProtocolImplementation) { + << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) + << (AMK == AvailabilityMergeKind::Override); + } else if (Which != 1 && AMK == AvailabilityMergeKind:: + OptionalProtocolImplementation) { // Allow diff erent 'introduced' / 'obsoleted' availability versions // on a method that implements an optional protocol requirement. It // makes less sense to allow this for 'deprecated' as the user can't @@ -2281,12 +2282,12 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr( } else { Diag(OldAA->getLocation(), diag::warn_mismatched_availability_override) - << Which - << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) - << FirstVersion.getAsString() << SecondVersion.getAsString() - << (AMK == AMK_Override); + << Which + << AvailabilityAttr::getPrettyPlatformName(Platform->getName()) + << FirstVersion.getAsString() << SecondVersion.getAsString() + << (AMK == AvailabilityMergeKind::Override); } - if (AMK == AMK_Override) + if (AMK == AvailabilityMergeKind::Override) Diag(CI.getLoc(), diag::note_overridden_method); else Diag(CI.getLoc(), diag::note_protocol_method); @@ -2427,7 +2428,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr( ND, AL, II, false /*Implicit*/, Introduced.Version, Deprecated.Version, Obsoleted.Version, IsUnavailable, Str, IsStrict, Replacement, - Sema::AMK_None, PriorityModifier, IIEnvironment); + AvailabilityMergeKind::None, PriorityModifier, IIEnvironment); if (NewAttr) D->addAttr(NewAttr); @@ -2483,8 +2484,8 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr( ND, AL, NewII, true /*Implicit*/, NewIntroduced, NewDeprecated, NewObsoleted, IsUnavailable, Str, IsStrict, Replacement, - Sema::AMK_None, PriorityModifier + Sema::AP_InferredFromOtherPlatform, - IIEnvironment); + AvailabilityMergeKind::None, + PriorityModifier + Sema::AP_InferredFromOtherPlatform, IIEnvironment); if (NewAttr) D->addAttr(NewAttr); } @@ -2525,8 +2526,8 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr( ND, AL, NewII, true /*Implicit*/, NewIntroduced, NewDeprecated, NewObsoleted, IsUnavailable, Str, IsStrict, Replacement, - Sema::AMK_None, PriorityModifier + Sema::AP_InferredFromOtherPlatform, - IIEnvironment); + AvailabilityMergeKind::None, + PriorityModifier + Sema::AP_InferredFromOtherPlatform, IIEnvironment); if (NewAttr) D->addAttr(NewAttr); } @@ -2558,7 +2559,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { MinMacCatalystVersion(Introduced.Version), MinMacCatalystVersion(Deprecated.Version), MinMacCatalystVersion(Obsoleted.Version), IsUnavailable, Str, - IsStrict, Replacement, Sema::AMK_None, + IsStrict, Replacement, AvailabilityMergeKind::None, PriorityModifier + Sema::AP_InferredFromOtherPlatform, IIEnvironment); if (NewAttr) D->addAttr(NewAttr); @@ -2600,7 +2601,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) { VersionOrEmptyVersion(NewIntroduced), VersionOrEmptyVersion(NewDeprecated), VersionOrEmptyVersion(NewObsoleted), /*IsUnavailable=*/false, Str, - IsStrict, Replacement, Sema::AMK_None, + IsStrict, Replacement, AvailabilityMergeKind::None, PriorityModifier + Sema::AP_InferredFromOtherPlatform + Sema::AP_InferredFromOtherPlatform, IIEnvironment); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits