1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
// RUN: %target-typecheck-verify-swift -target %target-cpu-apple-macos10.15
// REQUIRES: OS=macosx
// <rdar://problem/17669805> Suggest narrowing the range of bad availabile checks
import Foundation
@available(macOS 50.2, *)
func foo() { }
func useFoo() {
if #available(macOS 50.1, *) {
foo() // expected-error {{'foo()' is only available in macOS 50.2 or newer}} {{-1:23-27=50.2}}
}
}
func useFooDifferentSpelling() {
if #available(OSX 50.1, *) {
foo() // expected-error {{'foo()' is only available in macOS 50.2 or newer}} {{-1:21-25=50.2}}
}
}
func useFooAlreadyOkRange() {
if #available(OSX 51, *) {
foo()
}
}
func useFooUnaffectedSimilarText() {
if #available(iOS 50.10, OSX 50.1, *) {
foo() // expected-error {{'foo()' is only available in macOS 50.2 or newer}} {{-1:32-36=50.2}}
}
}
func useFooWayOff() {
// expected-note@-1 2 {{add @available attribute to enclosing global function}}
if #available(OSX 10.10, *) {
foo() // expected-error {{'foo()' is only available in macOS 50.2 or newer}}
// expected-note@-1{{add 'if #available' version check}}
}
if #available(OSX 49.0, *) {
foo() // expected-error {{'foo()' is only available in macOS 50.2 or newer}}
// expected-note@-1{{add 'if #available' version check}}
}
}
@available(OSX 50, *)
class FooUser {
func useFoo() {
foo() // expected-error {{'foo()' is only available in macOS 50.2 or newer}} {{-3:16-18=50.2}}
}
}
@available(OSX, introduced: 50, obsoleted: 50.4)
class FooUser2 {
func useFoo() {
foo() // expected-error {{'foo()' is only available in macOS 50.2 or newer}} {{-3:29-31=50.2}}
}
}
@available(OSX, introduced: 50, obsoleted: 50.4)
@objc
class FooUser3 : NSObject {
func useFoo() {
foo() // expected-error {{'foo()' is only available in macOS 50.2 or newer}} {{-4:29-31=50.2}}
}
}
@available(OSX, introduced: 50.4)
class FooUserOkRange {
func useFoo() {
foo()
}
}
@available(macOS 10.50.2, *)
func foo10() { }
func useFoo10() {
if #available(macOS 10.50.1, *) {
foo10() // expected-error {{'foo10()' is only available in macOS 10.50.2 or newer}} {{-1:23-30=10.50.2}}
}
}
func useFoo10WayOff() {
// expected-note@-1 3 {{add @available attribute to enclosing global function}}
if #available(OSX 10.10, *) {
foo10() // expected-error {{'foo10()' is only available in macOS 10.50.2 or newer}}
// expected-note@-1{{add 'if #available' version check}}
}
if #available(OSX 10.49.0, *) {
foo10() // expected-error {{'foo10()' is only available in macOS 10.50.2 or newer}}
// expected-note@-1{{add 'if #available' version check}}
}
if #available(OSX 9, *) {
foo10() // expected-error {{'foo10()' is only available in macOS 10.50.2 or newer}}
// expected-note@-1{{add 'if #available' version check}}
}
}
|