Skip to content

Commit a4203ed

Browse files
committed
Sema: Adopt SemanticAvailableAttr in override availability checking.
1 parent 7eb5323 commit a4203ed

File tree

4 files changed

+16
-16
lines changed

4 files changed

+16
-16
lines changed

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2954,11 +2954,11 @@ static bool diagnoseIfDeprecated(SourceLoc loc,
29542954

29552955
void swift::diagnoseOverrideOfUnavailableDecl(ValueDecl *override,
29562956
const ValueDecl *base,
2957-
const AvailableAttr *attr) {
2957+
SemanticAvailableAttr attr) {
29582958
ASTContext &ctx = override->getASTContext();
29592959
auto &diags = ctx.Diags;
2960-
if (attr->Rename.empty()) {
2961-
EncodedDiagnosticMessage EncodedMessage(attr->Message);
2960+
if (attr.getRename().empty()) {
2961+
EncodedDiagnosticMessage EncodedMessage(attr.getMessage());
29622962
diags.diagnose(override, diag::override_unavailable,
29632963
override->getBaseName(), EncodedMessage.Message);
29642964

@@ -2970,7 +2970,7 @@ void swift::diagnoseOverrideOfUnavailableDecl(ValueDecl *override,
29702970
diagnoseExplicitUnavailability(
29712971
base, override->getLoc(), where,
29722972
/*Flags*/ std::nullopt, [&](InFlightDiagnostic &diag) {
2973-
ParsedDeclName parsedName = parseDeclName(attr->Rename);
2973+
ParsedDeclName parsedName = parseDeclName(attr.getRename());
29742974
if (!parsedName || parsedName.isPropertyAccessor() ||
29752975
parsedName.isMember() || parsedName.isOperator()) {
29762976
return;

lib/Sema/TypeCheckAvailability.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ bool diagnoseDeclAvailability(const ValueDecl *D, SourceRange R,
240240
/// unavailable declaration.
241241
void diagnoseOverrideOfUnavailableDecl(ValueDecl *override,
242242
const ValueDecl *base,
243-
const AvailableAttr *attr);
243+
SemanticAvailableAttr attr);
244244

245245
/// Checks whether a declaration should be considered unavailable when referred
246246
/// to in the given declaration context and availability context and, if so,

lib/Sema/TypeCheckDeclOverride.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,21 +1919,22 @@ enum class OverrideUnavailabilityStatus {
19191919
Ignored,
19201920
};
19211921

1922-
static std::pair<OverrideUnavailabilityStatus, const AvailableAttr *>
1922+
static std::pair<OverrideUnavailabilityStatus,
1923+
std::optional<SemanticAvailableAttr>>
19231924
checkOverrideUnavailability(ValueDecl *override, ValueDecl *base) {
19241925
if (auto *overrideParent = override->getDeclContext()->getAsDecl()) {
19251926
// If the parent of the override is unavailable, then the unavailability of
19261927
// the override decl is irrelevant.
19271928
if (overrideParent->isSemanticallyUnavailable())
1928-
return {OverrideUnavailabilityStatus::Ignored, nullptr};
1929+
return {OverrideUnavailabilityStatus::Ignored, std::nullopt};
19291930
}
19301931

19311932
if (auto *baseAccessor = dyn_cast<AccessorDecl>(base)) {
19321933
// Ignore implicit accessors since the diagnostics are likely to duplicate
19331934
// the diagnostics for the explicit accessors that availability was inferred
19341935
// from.
19351936
if (baseAccessor->isImplicit())
1936-
return {OverrideUnavailabilityStatus::Ignored, nullptr};
1937+
return {OverrideUnavailabilityStatus::Ignored, std::nullopt};
19371938

19381939
if (auto *overrideAccessor = dyn_cast<AccessorDecl>(override)) {
19391940
// If base and override are accessors, check whether the unavailability of
@@ -1942,18 +1943,17 @@ checkOverrideUnavailability(ValueDecl *override, ValueDecl *base) {
19421943
if (checkOverrideUnavailability(overrideAccessor->getStorage(),
19431944
baseAccessor->getStorage())
19441945
.first != OverrideUnavailabilityStatus::Compatible)
1945-
return {OverrideUnavailabilityStatus::Ignored, nullptr};
1946+
return {OverrideUnavailabilityStatus::Ignored, std::nullopt};
19461947
}
19471948
}
19481949

19491950
auto baseUnavailableAttr = base->getUnavailableAttr();
19501951
auto overrideUnavailableAttr = override->getUnavailableAttr();
19511952

19521953
if (baseUnavailableAttr && !overrideUnavailableAttr)
1953-
return {OverrideUnavailabilityStatus::BaseUnavailable,
1954-
baseUnavailableAttr->getParsedAttr()};
1954+
return {OverrideUnavailabilityStatus::BaseUnavailable, baseUnavailableAttr};
19551955

1956-
return {OverrideUnavailabilityStatus::Compatible, nullptr};
1956+
return {OverrideUnavailabilityStatus::Compatible, std::nullopt};
19571957
}
19581958

19591959
static bool checkSingleOverride(ValueDecl *override, ValueDecl *base) {
@@ -2226,11 +2226,11 @@ static bool checkSingleOverride(ValueDecl *override, ValueDecl *base) {
22262226
// FIXME: Possibly should extend to more availability checking.
22272227
auto unavailabilityStatusAndAttr =
22282228
checkOverrideUnavailability(override, base);
2229-
auto *unavailableAttr = unavailabilityStatusAndAttr.second;
2229+
auto unavailableAttr = unavailabilityStatusAndAttr.second;
22302230

22312231
switch (unavailabilityStatusAndAttr.first) {
22322232
case OverrideUnavailabilityStatus::BaseUnavailable: {
2233-
diagnoseOverrideOfUnavailableDecl(override, base, unavailableAttr);
2233+
diagnoseOverrideOfUnavailableDecl(override, base, unavailableAttr.value());
22342234

22352235
if (isUnavailableInAllVersions(base)) {
22362236
auto modifier = override->getAttrs().getAttribute<OverrideAttr>();

lib/Sema/TypeCheckProtocol.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4408,8 +4408,8 @@ ConformanceChecker::resolveWitnessViaLookup(ValueDecl *requirement) {
44084408
}
44094409

44104410
case CheckKind::Unavailable: {
4411-
auto *attr = requirement->getUnavailableAttr()->getParsedAttr();
4412-
diagnoseOverrideOfUnavailableDecl(witness, requirement, attr);
4411+
diagnoseOverrideOfUnavailableDecl(
4412+
witness, requirement, requirement->getUnavailableAttr().value());
44134413
break;
44144414
}
44154415

0 commit comments

Comments
 (0)