Files
swift-mirror/test/Availability/availability_versions_canonical.swift
Allan Shortlidge e03cf967c3 Sema: Diagnose invalid OS versions in if #available queries.
Part of rdar://155558161.
2025-07-14 16:03:52 -07:00

106 lines
6.4 KiB
Swift

// RUN: %swift -typecheck %s -verify -parse-stdlib -module-name Swift -target x86_64-apple-macosx10.15 -verify-additional-prefix macos-
// RUN: %swift -typecheck %s -verify -parse-stdlib -module-name Swift -target arm64-apple-ios13 -verify-additional-prefix ios-
// RUN: %swift -typecheck %s -verify -parse-stdlib -module-name Swift -target arm64-apple-watchos6 -verify-additional-prefix watchos-
// RUN: %swift -typecheck %s -verify -parse-stdlib -module-name Swift -target arm64-apple-tvos13 -verify-additional-prefix tvos-
// RUN: %swift -typecheck %s -verify -parse-stdlib -module-name Swift -target arm64-apple-xros1 -verify-additional-prefix visionos-
@available(OSX 10.16, *)
func introducedOnMacOS10_16() { }
@available(OSX 11.0, *)
func introducedOnMacOS11_0() { }
@available(macOS 16.0, iOS 19.0, watchOS 12.0, tvOS 19.0, visionOS 3.0, *)
func introducedInVersionsMappingTo26_0() { }
@available(macOS 26.0, iOS 26.0, watchOS 26.0, tvOS 26.0, visionOS 26.0, *)
func introducedIn26_0() { }
@available(macOS 17.0, iOS 20.0, watchOS 13.0, tvOS 20.0, visionOS 4.0, *)
// expected-warning@-1 {{'17.0' is not a valid version number for macOS}}
// expected-warning@-2 {{'20.0' is not a valid version number for iOS}}
// expected-warning@-3 {{'13.0' is not a valid version number for watchOS}}
// expected-warning@-4 {{'20.0' is not a valid version number for tvOS}}
// expected-warning@-5 {{'4.0' is not a valid version number for visionOS}}
func introducedInVersionsMappingTo27_0() { }
@available(macOS 27.0, iOS 27.0, watchOS 27.0, tvOS 27.0, visionOS 27.0, *)
func introducedIn27_0() { }
func useUnderPoundAvailable() {
// expected-note@-1 * {{add '@available' attribute to enclosing global function}}
introducedOnMacOS10_16()
// expected-macos-error@-1 {{'introducedOnMacOS10_16()' is only available in macOS 11.0 or newer}}
// expected-macos-note@-2 {{add 'if #available' version check}}
introducedOnMacOS11_0()
// expected-macos-error@-1 {{'introducedOnMacOS11_0()' is only available in macOS 11.0 or newer}}
// expected-macos-note@-2 {{add 'if #available' version check}}
introducedInVersionsMappingTo26_0()
// expected-macos-error@-1 {{'introducedInVersionsMappingTo26_0()' is only available in macOS 26.0 or newer}}
// expected-ios-error@-2 {{'introducedInVersionsMappingTo26_0()' is only available in iOS 26.0 or newer}}
// expected-watchos-error@-3 {{'introducedInVersionsMappingTo26_0()' is only available in watchOS 26.0 or newer}}
// expected-tvos-error@-4 {{'introducedInVersionsMappingTo26_0()' is only available in tvOS 26.0 or newer}}
// expected-visionos-error@-5 {{'introducedInVersionsMappingTo26_0()' is only available in visionOS 26.0 or newer}}
// expected-note@-6 {{add 'if #available' version check}}
introducedIn26_0()
// expected-macos-error@-1 {{'introducedIn26_0()' is only available in macOS 26.0 or newer}}
// expected-ios-error@-2 {{'introducedIn26_0()' is only available in iOS 26.0 or newer}}
// expected-watchos-error@-3 {{'introducedIn26_0()' is only available in watchOS 26.0 or newer}}
// expected-tvos-error@-4 {{'introducedIn26_0()' is only available in tvOS 26.0 or newer}}
// expected-visionos-error@-5 {{'introducedIn26_0()' is only available in visionOS 26.0 or newer}}
// expected-note@-6 {{add 'if #available' version check}}
introducedInVersionsMappingTo27_0()
// expected-macos-error@-1 {{'introducedInVersionsMappingTo27_0()' is only available in macOS 27.0 or newer}}
// expected-ios-error@-2 {{'introducedInVersionsMappingTo27_0()' is only available in iOS 27.0 or newer}}
// expected-watchos-error@-3 {{'introducedInVersionsMappingTo27_0()' is only available in watchOS 27.0 or newer}}
// expected-tvos-error@-4 {{'introducedInVersionsMappingTo27_0()' is only available in tvOS 27.0 or newer}}
// expected-visionos-error@-5 {{'introducedInVersionsMappingTo27_0()' is only available in visionOS 27.0 or newer}}
// expected-note@-6 {{add 'if #available' version check}}
introducedIn27_0()
// expected-macos-error@-1 {{'introducedIn27_0()' is only available in macOS 27.0 or newer}}
// expected-ios-error@-2 {{'introducedIn27_0()' is only available in iOS 27.0 or newer}}
// expected-watchos-error@-3 {{'introducedIn27_0()' is only available in watchOS 27.0 or newer}}
// expected-tvos-error@-4 {{'introducedIn27_0()' is only available in tvOS 27.0 or newer}}
// expected-visionos-error@-5 {{'introducedIn27_0()' is only available in visionOS 27.0 or newer}}
// expected-note@-6 {{add 'if #available' version check}}
if #available(OSX 10.16, *) {
introducedOnMacOS10_16()
introducedOnMacOS11_0()
}
if #available(macOS 16.0, iOS 19.0, watchOS 12.0, tvOS 19.0, visionOS 3.0, *) {
introducedInVersionsMappingTo26_0()
introducedIn26_0()
introducedInVersionsMappingTo27_0()
// expected-macos-error@-1 {{'introducedInVersionsMappingTo27_0()' is only available in macOS 27.0 or newer}}
// expected-ios-error@-2 {{'introducedInVersionsMappingTo27_0()' is only available in iOS 27.0 or newer}}
// expected-watchos-error@-3 {{'introducedInVersionsMappingTo27_0()' is only available in watchOS 27.0 or newer}}
// expected-tvos-error@-4 {{'introducedInVersionsMappingTo27_0()' is only available in tvOS 27.0 or newer}}
// expected-visionos-error@-5 {{'introducedInVersionsMappingTo27_0()' is only available in visionOS 27.0 or newer}}
// expected-note@-6 {{add 'if #available' version check}}
introducedIn27_0()
// expected-macos-error@-1 {{'introducedIn27_0()' is only available in macOS 27.0 or newer}}
// expected-ios-error@-2 {{'introducedIn27_0()' is only available in iOS 27.0 or newer}}
// expected-watchos-error@-3 {{'introducedIn27_0()' is only available in watchOS 27.0 or newer}}
// expected-tvos-error@-4 {{'introducedIn27_0()' is only available in tvOS 27.0 or newer}}
// expected-visionos-error@-5 {{'introducedIn27_0()' is only available in visionOS 27.0 or newer}}
// expected-note@-6 {{add 'if #available' version check}}
}
if #available(macOS 17.0, iOS 20.0, watchOS 13.0, tvOS 20.0, visionOS 4.0, *) {
// expected-warning@-1 {{'17.0' is not a valid version number for macOS}}
// expected-warning@-2 {{'20.0' is not a valid version number for iOS}}
// expected-warning@-3 {{'13.0' is not a valid version number for watchOS}}
// expected-warning@-4 {{'20.0' is not a valid version number for tvOS}}
// expected-warning@-5 {{'4.0' is not a valid version number for visionOS}}
introducedInVersionsMappingTo27_0()
introducedIn27_0()
}
}