Skip to content

Commit eccc086

Browse files
committed
Fix version refinement fix-its with -target-min-inlining-version
1 parent 1c6298a commit eccc086

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1660,14 +1660,16 @@ static bool fixAvailabilityByNarrowingNearbyVersionCheck(
16601660
ASTContext &Context,
16611661
InFlightDiagnostic &Err) {
16621662
const TypeRefinementContext *TRC = nullptr;
1663-
AvailabilityContext RunningOSOverApprox =
1664-
TypeChecker::overApproximateAvailabilityAtLocation(ReferenceRange.Start,
1665-
ReferenceDC, &TRC);
1666-
VersionRange RunningRange = RunningOSOverApprox.getOSVersion();
1663+
(void)TypeChecker::overApproximateAvailabilityAtLocation(ReferenceRange.Start,
1664+
ReferenceDC, &TRC);
1665+
if (!TRC)
1666+
return false;
1667+
VersionRange RunningRange = TRC->getExplicitAvailabilityInfo().getOSVersion();
16671668
if (RunningRange.hasLowerEndpoint() &&
16681669
RequiredRange.hasLowerEndpoint() &&
1669-
AvailabilityContext(RequiredRange).isContainedIn(RunningOSOverApprox) &&
1670-
TRC && TRC->getReason() != TypeRefinementContext::Reason::Root) {
1670+
TRC->getReason() != TypeRefinementContext::Reason::Root &&
1671+
AvailabilityContext(RequiredRange).isContainedIn(
1672+
AvailabilityContext(RunningRange))) {
16711673

16721674
// Only fix situations that are "nearby" versions, meaning
16731675
// disagreement on a minor-or-less version for non-macOS,

test/attr/attr_inlinable_available.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ public func deployedUseAfterDeploymentTarget(
264264
_ = NoAvailable()
265265
_ = BeforeInliningTarget()
266266
_ = AtInliningTarget()
267-
_ = BetweenTargets() // expected-error {{'BetweenTargets' is only available in}} FIXME: should have {{18-25=10.14.5}} || {{31-35=12.3}} || {{42-46=12.3}} || {{56-59=5.3}}; instead, expected-note {{add 'if #available'}}
268267
_ = BetweenTargets() // expected-error {{'BetweenTargets' is only available in}} {{18-25=10.14.5}} || {{31-35=12.3}} || {{42-46=12.3}} || {{56-59=5.3}}
269268
_ = AtDeploymentTarget() // expected-error {{'AtDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
270269
_ = AfterDeploymentTarget() // expected-error {{'AfterDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
@@ -296,7 +295,7 @@ public func deployedUseAfterDeploymentTarget(
296295
_ = NoAvailable()
297296
_ = BeforeInliningTarget()
298297
_ = AtInliningTarget()
299-
_ = BetweenTargets() // expected-error {{'BetweenTargets' is only available in}} FIXME: should have {{18-25=10.14.5}} || {{31-35=12.3}} || {{42-46=12.3}} || {{56-59=5.3}}
298+
_ = BetweenTargets() // expected-error {{'BetweenTargets' is only available in}} {{18-25=10.14.5}} || {{31-35=12.3}} || {{42-46=12.3}} || {{56-59=5.3}}
300299
_ = AtDeploymentTarget() // expected-error {{'AtDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
301300
_ = AfterDeploymentTarget() // expected-error {{'AfterDeploymentTarget' is only available in}} expected-note {{add 'if #available'}}
302301

0 commit comments

Comments
 (0)