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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
// RUN: %target-typecheck-verify-swift
// REQUIRES: concurrency
@available(*, noasync)
func basicNoAsync() { }
@available(*, noasync, message: "a message from the author")
func messageNoAsync() { }
@available(*, noasync, renamed: "asyncReplacement()")
func renamedNoAsync(_ completion: @escaping (Int) -> Void) -> Void { }
@available(SwiftStdlib 5.5, *)
func asyncReplacement() async -> Int { }
@available(*, noasync, renamed: "IOActor.readString()")
func readStringFromIO() -> String {}
@available(SwiftStdlib 5.5, *)
actor IOActor {
func readString() -> String {
return readStringFromIO()
}
}
@available(SwiftStdlib 5.5, *)
func asyncFunc() async {
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
basicNoAsync()
// expected-warning@+1{{global function 'messageNoAsync' is unavailable from asynchronous contexts; a message from the author}}
messageNoAsync()
// expected-warning@+1{{global function 'renamedNoAsync' is unavailable from asynchronous contexts}}{{5-19=asyncReplacement}}
renamedNoAsync() { _ in }
// expected-warning@+1{{global function 'readStringFromIO' is unavailable from asynchronous contexts}}{{13-29=IOActor.readString}}
let _ = readStringFromIO()
}
// expected-error@+3{{asynchronous global function 'unavailableAsyncFunc()' must be available from asynchronous contexts}}
@available(SwiftStdlib 5.5, *)
@available(*, noasync)
func unavailableAsyncFunc() async {
}
@available(SwiftStdlib 5.5, *)
protocol BadSyncable {
// expected-error@+2{{asynchronous property 'isSyncd' must be available from asynchronous contexts}}
@available(*, noasync)
var isSyncd: Bool { get async }
// expected-error@+2{{asynchronous instance method 'sync' must be available from asynchronous contexts}}
@available(*, noasync)
func sync(_ str: String) async
}
class TestClass {
// expected-error@+2{{'@available' attribute cannot be applied to this declaration}}
@available(*, noasync)
deinit { }
}
@available(SwiftStdlib 5.5, *)
func test_defers_sync() {
defer {
defer { basicNoAsync() }
basicNoAsync()
}
func local_sync_func() {
defer { basicNoAsync() }
_ = ()
}
func local_async_func() async {
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
defer { basicNoAsync() }
_ = ()
}
let local_sync_closure = { () -> Void in
defer { basicNoAsync() }
_ = ()
}
_ = local_sync_closure
// local async closure
let local_async_closure = { () async -> Void in
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
defer { basicNoAsync() }
_ = ()
}
_ = local_async_closure
var local_sync_var: Void {
defer { basicNoAsync() }
return ()
}
var local_async_var: Void {
get async {
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
defer { basicNoAsync() }
return ()
}
}
}
@available(SwiftStdlib 5.5, *)
func test_defer_async() async {
defer {
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
defer { basicNoAsync() }
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
basicNoAsync()
}
func local_sync_func() {
defer { basicNoAsync() }
_ = ()
}
func local_async_func() async {
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
defer { basicNoAsync() }
_ = ()
}
let local_sync_closure = { () -> Void in
defer { basicNoAsync() }
_ = ()
}
_ = local_sync_closure
let local_async_closure = { () async -> Void in
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
defer { basicNoAsync() }
_ = ()
}
_ = local_async_closure
var local_sync_var: Void {
defer { basicNoAsync() }
return ()
}
var local_async_var: Void {
get async {
// expected-warning@+1{{global function 'basicNoAsync' is unavailable from asynchronous contexts; this is an error in the Swift 6 language mode}}
defer { basicNoAsync() }
return ()
}
}
}
|