Files
swift-mirror/test/attr/attr_availability_swiftpm_v4.swift
Allan Shortlidge aaa0e0a7b3 AST/Parse: Parse custom availability domain specs in if #available(...).
Delay resolution of availability domain identifiers parsed in availability
specifications until type-checking. This allows custom domain specifications to
be written in `if #available` queries.
2025-02-27 23:07:55 -08:00

89 lines
3.3 KiB
Swift

// RUN: %target-typecheck-verify-swift -package-description-version 4.0
@available(_PackageDescription 3)
func shortThree() {}
@available(_PackageDescription, introduced: 3.0)
func threePointOh() {}
@available(_PackageDescription, introduced: 3.0, obsoleted: 4.0)
func threePointOhOnly() {} // expected-note {{was obsoleted in PackageDescription 4.0}}
@available(_PackageDescription, deprecated: 3.0)
func deprecatedThreePointOh() {}
@available(_PackageDescription, obsoleted: 3.0)
func obsoletedThreePointOh() {} // expected-note {{was obsoleted in PackageDescription 3.0}}
@available(_PackageDescription, introduced: 3.0, obsoleted: 4.0)
class ThreePointOhOnly {} // expected-note {{was obsoleted in PackageDescription 4.0}}
@available(_PackageDescription, introduced: 3, obsoleted: 4, message: "use abc")
class ThreeOnlyWithMessage {} // expected-note {{was obsoleted in PackageDescription 4}}
@available(_PackageDescription 4)
func shortFour() {}
@available(_PackageDescription 4.0)
func shortFourPointOh() {}
@available(_PackageDescription, introduced: 4)
func four() {}
@available(_PackageDescription, introduced: 4.0)
func fourPointOh() {}
@available(_PackageDescription 4)
class ShortFour {}
@available(_PackageDescription 99)
func ninetyNine() {} // expected-note {{'ninetyNine()' was introduced in PackageDescription 99}}
shortThree()
threePointOh()
threePointOhOnly() // expected-error {{is unavailable}}
deprecatedThreePointOh() // expected-warning {{is deprecated}}
obsoletedThreePointOh() // expected-error {{is unavailable}}
let a : ThreePointOhOnly // expected-error {{is unavailable}}
let b : ThreeOnlyWithMessage // expected-error {{is unavailable: use abc}}
shortFour()
shortFourPointOh()
four()
fourPointOh()
let aa : ShortFour
ninetyNine() // expected-error {{'ninetyNine()' is unavailable}}
@available(_PackageDescription, introduced: 4.0)
@available(*, deprecated, message: "test deprecated")
func unconditionallyDeprecated() {}
unconditionallyDeprecated() // expected-warning {{test deprecated}}
@available(_PackageDescription 4.0, iOS 2.0, *) // expected-error {{PackageDescription version availability must be specified alone}}
func shouldBeAlone() {}
@available(_PackageDescription 4.0, swift 2.0, *) // expected-error {{PackageDescription version availability must be specified alone}} // expected-error {{Swift version availability must be specified alone}}
func shouldBeAlone2() {}
@available(*, unavailable, renamed: "shortFour")
@available(_PackageDescription 3)
func unconditionallyRenamed() {} // expected-note {{'unconditionallyRenamed()' has been explicitly marked unavailable here}}
unconditionallyRenamed() // expected-error {{'unconditionallyRenamed()' has been renamed to 'shortFour'}}
@available(*, unavailable, renamed: "shortFour")
@available(_PackageDescription 5)
func unconditionallyRenamedAndIntroducedLater() {} // expected-note {{'unconditionallyRenamedAndIntroducedLater()' has been explicitly marked unavailable here}}
unconditionallyRenamedAndIntroducedLater() // expected-error {{'unconditionallyRenamedAndIntroducedLater()' has been renamed to 'shortFour'}}
func testQuery() {
if #available(_PackageDescription 4.0) { // expected-error {{PackageDescription version checks not allowed in #available(...)}}
// expected-error@-1 {{condition required for target platform}}
shortFourPointOh()
}
}