mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
AST: Fix a crash when handling duplicate available attrs.
This commit is contained in:
@@ -81,12 +81,14 @@ static bool constraintIsStronger(const AvailabilityConstraint &lhs,
|
||||
|
||||
case AvailabilityConstraint::Reason::Obsoleted:
|
||||
// Pick the larger obsoleted range.
|
||||
return *lhs.getAttr().getObsoleted() < *rhs.getAttr().getObsoleted();
|
||||
return lhs.getAttr().getObsoleted().value() <
|
||||
rhs.getAttr().getObsoleted().value();
|
||||
|
||||
case AvailabilityConstraint::Reason::UnavailableForDeployment:
|
||||
case AvailabilityConstraint::Reason::PotentiallyUnavailable:
|
||||
// Pick the smaller introduced range.
|
||||
return *lhs.getAttr().getIntroduced() > *rhs.getAttr().getIntroduced();
|
||||
return lhs.getAttr().getIntroduced().value_or(llvm::VersionTuple()) >
|
||||
rhs.getAttr().getIntroduced().value_or(llvm::VersionTuple());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,15 @@ func unavailableInDynamicDomain() { } // expected-note * {{'unavailableInDynamic
|
||||
@available(UnknownDomain) // expected-error {{unrecognized platform name 'UnknownDomain'}}
|
||||
func availableInUnknownDomain() { }
|
||||
|
||||
func testDeployment() { // expected-note 2 {{add '@available' attribute to enclosing global function}}
|
||||
@available(EnabledDomain)
|
||||
@available(EnabledDomain)
|
||||
func availableInEnabledDomainTwice() { }
|
||||
|
||||
@available(EnabledDomain)
|
||||
@available(EnabledDomain, unavailable)
|
||||
func availableAndUnavailableInEnabledDomain() { } // expected-note {{'availableAndUnavailableInEnabledDomain()' has been explicitly marked unavailable here}}
|
||||
|
||||
func testDeployment() { // expected-note 3 {{add '@available' attribute to enclosing global function}}
|
||||
alwaysAvailable()
|
||||
availableInEnabledDomain() // expected-error {{'availableInEnabledDomain()' is only available in EnabledDomain}}
|
||||
// expected-note@-1 {{add 'if #available' version check}}
|
||||
@@ -40,6 +48,9 @@ func testDeployment() { // expected-note 2 {{add '@available' attribute to enclo
|
||||
availableInDynamicDomain() // expected-error {{'availableInDynamicDomain()' is only available in DynamicDomain}}
|
||||
// expected-note@-1 {{add 'if #available' version check}}
|
||||
availableInUnknownDomain()
|
||||
availableInEnabledDomainTwice() // expected-error {{'availableInEnabledDomainTwice()' is only available in EnabledDomain}}
|
||||
// expected-note@-1 {{add 'if #available' version check}}
|
||||
availableAndUnavailableInEnabledDomain() // expected-error {{'availableAndUnavailableInEnabledDomain()' is unavailable}}
|
||||
}
|
||||
|
||||
func testIfAvailable(_ truthy: Bool) { // expected-note 9 {{add '@available' attribute to enclosing global function}}
|
||||
|
||||
@@ -59,3 +59,11 @@ func availableInDynamicDomain() { }
|
||||
|
||||
@available(UnknownDomain) // expected-error {{unrecognized platform name 'UnknownDomain'}}
|
||||
func availableInUnknownDomain() { }
|
||||
|
||||
@available(EnabledDomain)
|
||||
@available(EnabledDomain)
|
||||
func availableInEnabledDomainTwice() { }
|
||||
|
||||
@available(EnabledDomain)
|
||||
@available(EnabledDomain, unavailable)
|
||||
func availableAndUnavailableInEnabledDomain() { }
|
||||
|
||||
Reference in New Issue
Block a user