Skip to content

Commit feb8146

Browse files
committed
AST: Consolidate code invoking DeclRuntimeAvailabilityRequest.
NFC.
1 parent 24a91bb commit feb8146

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

lib/AST/Availability.cpp

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -572,8 +572,9 @@ static bool constraintIndicatesRuntimeUnavailability(
572572
}
573573
}
574574

575-
/// Computes the `DeclRuntimeAvailability` value for `decl`.
576-
static DeclRuntimeAvailability getDeclRuntimeAvailability(const Decl *decl) {
575+
/// Computes the `DeclRuntimeAvailability` value for `decl` in isolation.
576+
static DeclRuntimeAvailability
577+
computeDeclRuntimeAvailability(const Decl *decl) {
577578
// Don't trust unavailability on declarations from Clang modules.
578579
if (isa<ClangModuleUnit>(decl->getDeclContext()->getModuleScopeContext()))
579580
return DeclRuntimeAvailability::PotentiallyAvailable;
@@ -630,30 +631,34 @@ static DeclRuntimeAvailability getDeclRuntimeAvailability(const Decl *decl) {
630631
return DeclRuntimeAvailability::PotentiallyAvailable;
631632
}
632633

634+
/// Determines the `DeclRuntimeAvailability` value for `decl` via
635+
/// `DeclRuntimeAvailabilityRequest`.
636+
static DeclRuntimeAvailability getDeclRuntimeAvailability(const Decl *decl) {
637+
return evaluateOrDefault(decl->getASTContext().evaluator,
638+
DeclRuntimeAvailabilityRequest{decl},
639+
DeclRuntimeAvailability::PotentiallyAvailable);
640+
}
641+
633642
DeclRuntimeAvailability
634643
DeclRuntimeAvailabilityRequest::evaluate(Evaluator &evaluator,
635644
const Decl *decl) const {
636645
auto inherited = DeclRuntimeAvailability::PotentiallyAvailable;
637646
if (auto *parent =
638647
AvailabilityInference::parentDeclForInferredAvailability(decl)) {
639-
inherited = evaluateOrDefault(
640-
evaluator, DeclRuntimeAvailabilityRequest{parent}, inherited);
648+
inherited = getDeclRuntimeAvailability(parent);
641649
}
642650

643-
// If the inherited semantic availability is already maximally unavailable
651+
// If the inherited runtime availability is already maximally unavailable
644652
// then skip computing unavailability for this declaration.
645653
if (inherited == DeclRuntimeAvailability::AlwaysUnavailableABICompatible)
646654
return DeclRuntimeAvailability::AlwaysUnavailableABICompatible;
647655

648-
auto availability = getDeclRuntimeAvailability(decl);
656+
auto availability = computeDeclRuntimeAvailability(decl);
649657
return std::max(inherited, availability);
650658
}
651659

652660
bool Decl::isUnreachableAtRuntime() const {
653-
auto availability = evaluateOrDefault(
654-
getASTContext().evaluator, DeclRuntimeAvailabilityRequest{this},
655-
DeclRuntimeAvailability::PotentiallyAvailable);
656-
return availability ==
661+
return getDeclRuntimeAvailability(this) >=
657662
DeclRuntimeAvailability::AlwaysUnavailableABICompatible;
658663
}
659664

@@ -666,13 +671,15 @@ getEffectiveUnavailableDeclOptimization(ASTContext &ctx) {
666671
}
667672

668673
bool Decl::isAvailableDuringLowering() const {
669-
// Unconditionally unavailable declarations should be skipped during lowering
670-
// when -unavailable-decl-optimization=complete is specified.
674+
auto availability = getDeclRuntimeAvailability(this);
675+
671676
if (getEffectiveUnavailableDeclOptimization(getASTContext()) !=
672677
UnavailableDeclOptimization::Complete)
673678
return true;
674679

675-
return !isUnreachableAtRuntime();
680+
// All unreachable declarations should be skipped during lowering
681+
// when -unavailable-decl-optimization=complete is specified.
682+
return availability < DeclRuntimeAvailability::AlwaysUnavailableABICompatible;
676683
}
677684

678685
bool Decl::requiresUnavailableDeclABICompatibilityStubs() const {

test/SILGen/unavailable_decl_optimization_stub_struct.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public struct ImplicitInitStruct {
1111
// CHECK: } // end sil function '$s4Test18ImplicitInitStructVACycfC'
1212
}
1313

14+
// CHECK-LABEL: sil{{.*}}@$s4Test23testImplicitConstructoryyF
1415
@available(*, unavailable)
1516
public func testImplicitConstructor() {
1617
// Force s4Test18ImplicitInitStructVACycfC to be emitted.

0 commit comments

Comments
 (0)