Skip to content

Commit 7e71db8

Browse files
committed
[clang][NFC] Convert Sema::AvailabilityMergeKind to scoped enum
1 parent ed673aa commit 7e71db8

File tree

3 files changed

+59
-55
lines changed

3 files changed

+59
-55
lines changed

clang/include/clang/Sema/Sema.h

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,25 @@ enum class OffsetOfKind {
619619
Macro,
620620
};
621621

622+
/// Describes the kind of merge to perform for availability
623+
/// attributes (including "deprecated", "unavailable", and "availability").
624+
enum class AvailabilityMergeKind {
625+
/// Don't merge availability attributes at all.
626+
None,
627+
/// Merge availability attributes for a redeclaration, which requires
628+
/// an exact match.
629+
Redeclaration,
630+
/// Merge availability attributes for an override, which requires
631+
/// an exact match or a weakening of constraints.
632+
Override,
633+
/// Merge availability attributes for an implementation of
634+
/// a protocol requirement.
635+
ProtocolImplementation,
636+
/// Merge availability attributes for an implementation of
637+
/// an optional protocol requirement.
638+
OptionalProtocolImplementation
639+
};
640+
622641
/// Sema - This implements semantic analysis and AST building for C.
623642
/// \nosubgrouping
624643
class Sema final : public SemaBase {
@@ -4176,28 +4195,10 @@ class Sema final : public SemaBase {
41764195
TypeSourceInfo *TInfo);
41774196
bool isIncompatibleTypedef(const TypeDecl *Old, TypedefNameDecl *New);
41784197

4179-
/// Describes the kind of merge to perform for availability
4180-
/// attributes (including "deprecated", "unavailable", and "availability").
4181-
enum AvailabilityMergeKind {
4182-
/// Don't merge availability attributes at all.
4183-
AMK_None,
4184-
/// Merge availability attributes for a redeclaration, which requires
4185-
/// an exact match.
4186-
AMK_Redeclaration,
4187-
/// Merge availability attributes for an override, which requires
4188-
/// an exact match or a weakening of constraints.
4189-
AMK_Override,
4190-
/// Merge availability attributes for an implementation of
4191-
/// a protocol requirement.
4192-
AMK_ProtocolImplementation,
4193-
/// Merge availability attributes for an implementation of
4194-
/// an optional protocol requirement.
4195-
AMK_OptionalProtocolImplementation
4196-
};
4197-
41984198
/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.
4199-
void mergeDeclAttributes(NamedDecl *New, Decl *Old,
4200-
AvailabilityMergeKind AMK = AMK_Redeclaration);
4199+
void mergeDeclAttributes(
4200+
NamedDecl *New, Decl *Old,
4201+
AvailabilityMergeKind AMK = AvailabilityMergeKind::Redeclaration);
42014202

42024203
/// MergeTypedefNameDecl - We just parsed a typedef 'New' which has the
42034204
/// same name and scope as a previous declaration 'Old'. Figure out

clang/lib/Sema/SemaDecl.cpp

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2800,7 +2800,7 @@ static bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {
28002800

28012801
static bool mergeDeclAttribute(Sema &S, NamedDecl *D,
28022802
const InheritableAttr *Attr,
2803-
Sema::AvailabilityMergeKind AMK) {
2803+
AvailabilityMergeKind AMK) {
28042804
// Diagnose any mutual exclusions between the attribute that we want to add
28052805
// and attributes that already exist on the declaration.
28062806
if (!DiagnoseMutualExclusions(S, D, Attr))
@@ -2865,9 +2865,9 @@ static bool mergeDeclAttribute(Sema &S, NamedDecl *D,
28652865
// such attributes on a declaration at the same time.
28662866
NewAttr = nullptr;
28672867
else if ((isa<DeprecatedAttr>(Attr) || isa<UnavailableAttr>(Attr)) &&
2868-
(AMK == Sema::AMK_Override ||
2869-
AMK == Sema::AMK_ProtocolImplementation ||
2870-
AMK == Sema::AMK_OptionalProtocolImplementation))
2868+
(AMK == AvailabilityMergeKind::Override ||
2869+
AMK == AvailabilityMergeKind::ProtocolImplementation ||
2870+
AMK == AvailabilityMergeKind::OptionalProtocolImplementation))
28712871
NewAttr = nullptr;
28722872
else if (const auto *UA = dyn_cast<UuidAttr>(Attr))
28732873
NewAttr = S.mergeUuidAttr(D, *UA, UA->getGuid(), UA->getGuidDecl());
@@ -3243,18 +3243,18 @@ void Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old,
32433243

32443244
for (auto *I : Old->specific_attrs<InheritableAttr>()) {
32453245
// Ignore deprecated/unavailable/availability attributes if requested.
3246-
AvailabilityMergeKind LocalAMK = AMK_None;
3246+
AvailabilityMergeKind LocalAMK = AvailabilityMergeKind::None;
32473247
if (isa<DeprecatedAttr>(I) ||
32483248
isa<UnavailableAttr>(I) ||
32493249
isa<AvailabilityAttr>(I)) {
32503250
switch (AMK) {
3251-
case AMK_None:
3251+
case AvailabilityMergeKind::None:
32523252
continue;
32533253

3254-
case AMK_Redeclaration:
3255-
case AMK_Override:
3256-
case AMK_ProtocolImplementation:
3257-
case AMK_OptionalProtocolImplementation:
3254+
case AvailabilityMergeKind::Redeclaration:
3255+
case AvailabilityMergeKind::Override:
3256+
case AvailabilityMergeKind::ProtocolImplementation:
3257+
case AvailabilityMergeKind::OptionalProtocolImplementation:
32583258
LocalAMK = AMK;
32593259
break;
32603260
}
@@ -4387,10 +4387,12 @@ void Sema::mergeObjCMethodDecls(ObjCMethodDecl *newMethod,
43874387
// Merge the attributes, including deprecated/unavailable
43884388
AvailabilityMergeKind MergeKind =
43894389
isa<ObjCProtocolDecl>(oldMethod->getDeclContext())
4390-
? (oldMethod->isOptional() ? AMK_OptionalProtocolImplementation
4391-
: AMK_ProtocolImplementation)
4392-
: isa<ObjCImplDecl>(newMethod->getDeclContext()) ? AMK_Redeclaration
4393-
: AMK_Override;
4390+
? (oldMethod->isOptional()
4391+
? AvailabilityMergeKind::OptionalProtocolImplementation
4392+
: AvailabilityMergeKind::ProtocolImplementation)
4393+
: isa<ObjCImplDecl>(newMethod->getDeclContext())
4394+
? AvailabilityMergeKind::Redeclaration
4395+
: AvailabilityMergeKind::Override;
43944396

43954397
mergeDeclAttributes(newMethod, oldMethod, MergeKind);
43964398

clang/lib/Sema/SemaDeclAttr.cpp

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2188,14 +2188,14 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr(
21882188
bool FoundAny = false;
21892189
bool OverrideOrImpl = false;
21902190
switch (AMK) {
2191-
case AMK_None:
2192-
case AMK_Redeclaration:
2191+
case AvailabilityMergeKind::None:
2192+
case AvailabilityMergeKind::Redeclaration:
21932193
OverrideOrImpl = false;
21942194
break;
21952195

2196-
case AMK_Override:
2197-
case AMK_ProtocolImplementation:
2198-
case AMK_OptionalProtocolImplementation:
2196+
case AvailabilityMergeKind::Override:
2197+
case AvailabilityMergeKind::ProtocolImplementation:
2198+
case AvailabilityMergeKind::OptionalProtocolImplementation:
21992199
OverrideOrImpl = true;
22002200
break;
22012201
}
@@ -2268,9 +2268,10 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr(
22682268
if (Which == -1) {
22692269
Diag(OldAA->getLocation(),
22702270
diag::warn_mismatched_availability_override_unavail)
2271-
<< AvailabilityAttr::getPrettyPlatformName(Platform->getName())
2272-
<< (AMK == AMK_Override);
2273-
} else if (Which != 1 && AMK == AMK_OptionalProtocolImplementation) {
2271+
<< AvailabilityAttr::getPrettyPlatformName(Platform->getName())
2272+
<< (AMK == AvailabilityMergeKind::Override);
2273+
} else if (Which != 1 && AMK == AvailabilityMergeKind::
2274+
OptionalProtocolImplementation) {
22742275
// Allow different 'introduced' / 'obsoleted' availability versions
22752276
// on a method that implements an optional protocol requirement. It
22762277
// makes less sense to allow this for 'deprecated' as the user can't
@@ -2281,12 +2282,12 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr(
22812282
} else {
22822283
Diag(OldAA->getLocation(),
22832284
diag::warn_mismatched_availability_override)
2284-
<< Which
2285-
<< AvailabilityAttr::getPrettyPlatformName(Platform->getName())
2286-
<< FirstVersion.getAsString() << SecondVersion.getAsString()
2287-
<< (AMK == AMK_Override);
2285+
<< Which
2286+
<< AvailabilityAttr::getPrettyPlatformName(Platform->getName())
2287+
<< FirstVersion.getAsString() << SecondVersion.getAsString()
2288+
<< (AMK == AvailabilityMergeKind::Override);
22882289
}
2289-
if (AMK == AMK_Override)
2290+
if (AMK == AvailabilityMergeKind::Override)
22902291
Diag(CI.getLoc(), diag::note_overridden_method);
22912292
else
22922293
Diag(CI.getLoc(), diag::note_protocol_method);
@@ -2427,7 +2428,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
24272428
AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr(
24282429
ND, AL, II, false /*Implicit*/, Introduced.Version, Deprecated.Version,
24292430
Obsoleted.Version, IsUnavailable, Str, IsStrict, Replacement,
2430-
Sema::AMK_None, PriorityModifier, IIEnvironment);
2431+
AvailabilityMergeKind::None, PriorityModifier, IIEnvironment);
24312432
if (NewAttr)
24322433
D->addAttr(NewAttr);
24332434

@@ -2483,8 +2484,8 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
24832484
AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr(
24842485
ND, AL, NewII, true /*Implicit*/, NewIntroduced, NewDeprecated,
24852486
NewObsoleted, IsUnavailable, Str, IsStrict, Replacement,
2486-
Sema::AMK_None, PriorityModifier + Sema::AP_InferredFromOtherPlatform,
2487-
IIEnvironment);
2487+
AvailabilityMergeKind::None,
2488+
PriorityModifier + Sema::AP_InferredFromOtherPlatform, IIEnvironment);
24882489
if (NewAttr)
24892490
D->addAttr(NewAttr);
24902491
}
@@ -2525,8 +2526,8 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
25252526
AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr(
25262527
ND, AL, NewII, true /*Implicit*/, NewIntroduced, NewDeprecated,
25272528
NewObsoleted, IsUnavailable, Str, IsStrict, Replacement,
2528-
Sema::AMK_None, PriorityModifier + Sema::AP_InferredFromOtherPlatform,
2529-
IIEnvironment);
2529+
AvailabilityMergeKind::None,
2530+
PriorityModifier + Sema::AP_InferredFromOtherPlatform, IIEnvironment);
25302531
if (NewAttr)
25312532
D->addAttr(NewAttr);
25322533
}
@@ -2558,7 +2559,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
25582559
MinMacCatalystVersion(Introduced.Version),
25592560
MinMacCatalystVersion(Deprecated.Version),
25602561
MinMacCatalystVersion(Obsoleted.Version), IsUnavailable, Str,
2561-
IsStrict, Replacement, Sema::AMK_None,
2562+
IsStrict, Replacement, AvailabilityMergeKind::None,
25622563
PriorityModifier + Sema::AP_InferredFromOtherPlatform, IIEnvironment);
25632564
if (NewAttr)
25642565
D->addAttr(NewAttr);
@@ -2600,7 +2601,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
26002601
VersionOrEmptyVersion(NewIntroduced),
26012602
VersionOrEmptyVersion(NewDeprecated),
26022603
VersionOrEmptyVersion(NewObsoleted), /*IsUnavailable=*/false, Str,
2603-
IsStrict, Replacement, Sema::AMK_None,
2604+
IsStrict, Replacement, AvailabilityMergeKind::None,
26042605
PriorityModifier + Sema::AP_InferredFromOtherPlatform +
26052606
Sema::AP_InferredFromOtherPlatform,
26062607
IIEnvironment);

0 commit comments

Comments
 (0)