[clang] 7e71db8 - [clang][NFC] Convert `Sema::AvailabilityMergeKind` to scoped enum
Vlad Serebrennikov via cfe-commits
cfe-commits at lists.llvm.org
Thu May 1 21:57:03 PDT 2025
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);
More information about the cfe-commits
mailing list