|
| 1 | +// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature AnyAppleOSAvailability -target %target-cpu-apple-macos26 -verify-additional-prefix apple- -verify-additional-prefix macos- |
| 2 | +// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature AnyAppleOSAvailability -target %target-cpu-apple-ios26 -verify-additional-prefix apple- -verify-additional-prefix ios- |
| 3 | +// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature AnyAppleOSAvailability -target %target-cpu-apple-watchos26 -verify-additional-prefix apple- -verify-additional-prefix watchos- |
| 4 | +// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature AnyAppleOSAvailability -target %target-cpu-apple-tvos26 -verify-additional-prefix apple- -verify-additional-prefix tvos- |
| 5 | +// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature AnyAppleOSAvailability -target %target-cpu-apple-visionos26 -verify-additional-prefix apple- -verify-additional-prefix visionos- |
| 6 | +// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature AnyAppleOSAvailability -target x86_64-unknown-linux-gnu |
| 7 | +// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature AnyAppleOSAvailability -target x86_64-unknown-windows-msvc |
| 8 | + |
| 9 | +// REQUIRES: swift_feature_AnyAppleOSAvailability |
| 10 | + |
| 11 | +@available(anyAppleOS 26.1, *) |
| 12 | +func availableInAnyAppleOS26_1() { } |
| 13 | + |
| 14 | +@available(anyAppleOS, deprecated: 26) |
| 15 | +func deprecatedInAnyAppleOS26() { } |
| 16 | + |
| 17 | +@available(anyAppleOS, obsoleted: 26) |
| 18 | +func obsoletedInAnyAppleOS26() { } |
| 19 | +// expected-macos-note@-1 {{'obsoletedInAnyAppleOS26()' was obsoleted in macOS 26}} |
| 20 | +// expected-ios-note@-2 {{'obsoletedInAnyAppleOS26()' was obsoleted in iOS 26}} |
| 21 | +// expected-watchos-note@-3 {{'obsoletedInAnyAppleOS26()' was obsoleted in watchOS 26}} |
| 22 | +// expected-tvos-note@-4 {{'obsoletedInAnyAppleOS26()' was obsoleted in tvOS 26}} |
| 23 | +// expected-visionos-note@-5 {{'obsoletedInAnyAppleOS26()' was obsoleted in visionOS 26}} |
| 24 | + |
| 25 | +@available(anyAppleOS 26, macOS 26.1, *) |
| 26 | +func availableInAnyAppleOS26AndMacOS26_1() { } |
| 27 | + |
| 28 | +@available(macOS 26.1, anyAppleOS 26, *) |
| 29 | +func availableInMacOS26_1AndAnyAppleOS26() { } |
| 30 | + |
| 31 | +@available(macOS 26.1, iOS 26.1, watchOS 26.1, tvOS 26.1, visionOS 26.1, *) |
| 32 | +func availableInEveryAppleOS26_1() { } |
| 33 | + |
| 34 | +@available(anyAppleOS, unavailable) |
| 35 | +func unavailableInAnyAppleOS() { } // expected-apple-note {{'unavailableInAnyAppleOS()' has been explicitly marked unavailable here}} |
| 36 | + |
| 37 | +// FIXME: [availability] Ensure the fix-it suggests @available(anyAppleOS ...) rdar://163819878 |
| 38 | +func availableAtDeploymentTarget() { |
| 39 | + // expected-apple-note@-1 {{add '@available' attribute to enclosing global function}} |
| 40 | + // expected-macos-note@-2 2 {{add '@available' attribute to enclosing global function}} |
| 41 | + |
| 42 | + // FIXME: [availability] Ensure the fix-it suggests if #available(anyAppleOS ...) rdar://163819878 |
| 43 | + availableInAnyAppleOS26_1() |
| 44 | + // expected-macos-error@-1 {{'availableInAnyAppleOS26_1()' is only available in macOS 26.1 or newer}} |
| 45 | + // expected-ios-error@-2 {{'availableInAnyAppleOS26_1()' is only available in iOS 26.1 or newer}} |
| 46 | + // expected-watchos-error@-3 {{'availableInAnyAppleOS26_1()' is only available in watchOS 26.1 or newer}} |
| 47 | + // expected-tvos-error@-4 {{'availableInAnyAppleOS26_1()' is only available in tvOS 26.1 or newer}} |
| 48 | + // expected-visionos-error@-5 {{'availableInAnyAppleOS26_1()' is only available in visionOS 26.1 or newer}} |
| 49 | + // expected-apple-note@-6 {{add 'if #available' version check}} |
| 50 | + |
| 51 | + // FIXME: [availability] Remap domain/version in deprecation diagnostics |
| 52 | + deprecatedInAnyAppleOS26() |
| 53 | + // expected-apple-warning@-1 {{'deprecatedInAnyAppleOS26()' was deprecated in any Apple OS 26}} |
| 54 | + |
| 55 | + obsoletedInAnyAppleOS26() |
| 56 | + // expected-macos-error@-1 {{'obsoletedInAnyAppleOS26()' is unavailable in macOS}} |
| 57 | + // expected-ios-error@-2 {{'obsoletedInAnyAppleOS26()' is unavailable in iOS}} |
| 58 | + // expected-watchos-error@-3 {{'obsoletedInAnyAppleOS26()' is unavailable in watchOS}} |
| 59 | + // expected-tvos-error@-4 {{'obsoletedInAnyAppleOS26()' is unavailable in tvOS}} |
| 60 | + // expected-visionos-error@-5 {{'obsoletedInAnyAppleOS26()' is unavailable in visionOS}} |
| 61 | + |
| 62 | + availableInAnyAppleOS26AndMacOS26_1() |
| 63 | + // expected-macos-error@-1 {{'availableInAnyAppleOS26AndMacOS26_1()' is only available in macOS 26.1 or newer}} |
| 64 | + // expected-macos-note@-2 {{add 'if #available' version check}}{{3-40=if #available(macOS 26.1, *) {\n availableInAnyAppleOS26AndMacOS26_1()\n \} else {\n // Fallback on earlier versions\n \}}} |
| 65 | + availableInMacOS26_1AndAnyAppleOS26() |
| 66 | + // expected-macos-error@-1 {{'availableInMacOS26_1AndAnyAppleOS26()' is only available in macOS 26.1 or newer}} |
| 67 | + // expected-macos-note@-2 {{add 'if #available' version check}}{{3-40=if #available(macOS 26.1, *) {\n availableInMacOS26_1AndAnyAppleOS26()\n \} else {\n // Fallback on earlier versions\n \}}} |
| 68 | + |
| 69 | + unavailableInAnyAppleOS() |
| 70 | + // expected-macos-error@-1 {{'unavailableInAnyAppleOS()' is unavailable in macOS}} |
| 71 | + // expected-ios-error@-2 {{'unavailableInAnyAppleOS()' is unavailable in iOS}} |
| 72 | + // expected-watchos-error@-3 {{'unavailableInAnyAppleOS()' is unavailable in watchOS}} |
| 73 | + // expected-tvos-error@-4 {{'unavailableInAnyAppleOS()' is unavailable in tvOS}} |
| 74 | + // expected-visionos-error@-5 {{'unavailableInAnyAppleOS()' is unavailable in visionOS}} |
| 75 | + |
| 76 | + if #available(anyAppleOS 25, *) { } // expected-warning {{'25' is not a valid version number for any Apple OS}} |
| 77 | + |
| 78 | + if #available(anyAppleOS 26.1, *) { |
| 79 | + availableInAnyAppleOS26_1() |
| 80 | + availableInEveryAppleOS26_1() |
| 81 | + availableInAnyAppleOS26AndMacOS26_1() |
| 82 | + availableInMacOS26_1AndAnyAppleOS26() |
| 83 | + } |
| 84 | + if #available(macOS 26.1, *) { |
| 85 | + availableInAnyAppleOS26AndMacOS26_1() |
| 86 | + availableInMacOS26_1AndAnyAppleOS26() |
| 87 | + } |
| 88 | + if #available(macOS 26.1, iOS 26.1, watchOS 26.1, tvOS 26.1, visionOS 26.1, *) { |
| 89 | + availableInAnyAppleOS26_1() |
| 90 | + availableInEveryAppleOS26_1() |
| 91 | + } |
| 92 | +} |
| 93 | + |
| 94 | +@available(anyAppleOS 26.1, *) |
| 95 | +struct AvailableInAnyAppleOS26_1 { |
| 96 | + func method() { |
| 97 | + availableInAnyAppleOS26_1() |
| 98 | + } |
| 99 | +} |
| 100 | + |
| 101 | +@available(anyAppleOS, unavailable) |
| 102 | +func alsoUnavailableInAnyAppleOS() { |
| 103 | + unavailableInAnyAppleOS() |
| 104 | +} |
0 commit comments