22
33// REQUIRES: concurrency
44
5- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
5+ @available ( SwiftStdlib 5 . 5 , * )
66func doAsynchronously( ) async { }
7- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
7+ @available ( SwiftStdlib 5 . 5 , * )
88func doSynchronously( ) { }
99
10- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
10+ @available ( SwiftStdlib 5 . 5 , * )
1111func testConversions( ) async {
1212 let _: ( ) -> Void = doAsynchronously // expected-error{{invalid conversion from 'async' function of type '() async -> ()' to synchronous function type '() -> Void'}}
1313 let _: ( ) async -> Void = doSynchronously // okay
1414}
1515
1616// Overloading
17- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
17+ @available ( SwiftStdlib 5 . 5 , * )
1818@available ( swift, deprecated: 4.0 , message: " synchronous is no fun " )
1919func overloadedSame( _: Int = 0 ) -> String { " synchronous " }
2020
21- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
21+ @available ( SwiftStdlib 5 . 5 , * )
2222func overloadedSame( ) async -> String { " asynchronous " }
2323
24- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
24+ @available ( SwiftStdlib 5 . 5 , * )
2525func overloaded( ) -> String { " synchronous " }
26- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
26+ @available ( SwiftStdlib 5 . 5 , * )
2727func overloaded( ) async -> Double { 3.14159 }
2828
29- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
29+ @available ( SwiftStdlib 5 . 5 , * )
3030@available ( swift, deprecated: 4.0 , message: " synchronous is no fun " )
3131func overloadedOptDifference( ) -> String { " synchronous " }
3232
33- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
33+ @available ( SwiftStdlib 5 . 5 , * )
3434func overloadedOptDifference( ) async -> String ? { nil }
3535
36- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
36+ @available ( SwiftStdlib 5 . 5 , * )
3737func testOverloadedSync( ) {
3838 _ = overloadedSame ( ) // expected-warning{{synchronous is no fun}}
3939
@@ -63,7 +63,7 @@ func testOverloadedSync() {
6363 let _: Int = fn4 // expected-error{{value of type '() async -> ()'}}
6464}
6565
66- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
66+ @available ( SwiftStdlib 5 . 5 , * )
6767func testOverloadedAsync( ) async {
6868 _ = await overloadedSame ( ) // no warning
6969
@@ -98,12 +98,12 @@ func testOverloadedAsync() async {
9898 let _: Int = fn4 // expected-error{{value of type '() async -> ()'}}
9999}
100100
101- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
101+ @available ( SwiftStdlib 5 . 5 , * )
102102func takesAsyncClosure( _ closure: ( ) async -> String ) -> Int { 0 }
103- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
103+ @available ( SwiftStdlib 5 . 5 , * )
104104func takesAsyncClosure( _ closure: ( ) -> String ) -> String { " " }
105105
106- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
106+ @available ( SwiftStdlib 5 . 5 , * )
107107func testPassAsyncClosure( ) {
108108 let a = takesAsyncClosure { await overloadedSame ( ) }
109109 let _: Double = a // expected-error{{convert value of type 'Int'}}
@@ -112,7 +112,7 @@ func testPassAsyncClosure() {
112112 let _: Double = b // expected-error{{convert value of type 'String'}}
113113}
114114
115- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
115+ @available ( SwiftStdlib 5 . 5 , * )
116116struct FunctionTypes {
117117 var syncNonThrowing : ( ) -> Void
118118 var syncThrowing : ( ) throws -> Void
@@ -135,27 +135,27 @@ struct FunctionTypes {
135135}
136136
137137// Overloading when there is conversion from sync to async.
138- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
138+ @available ( SwiftStdlib 5 . 5 , * )
139139func bar( _ f: ( Int ) -> Int ) -> Int {
140140 return f ( 2 )
141141}
142142
143- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
143+ @available ( SwiftStdlib 5 . 5 , * )
144144func bar( _ f: ( Int ) async -> Int ) async -> Int {
145145 return await f ( 2 )
146146}
147147
148- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
148+ @available ( SwiftStdlib 5 . 5 , * )
149149func incrementSync( _ x: Int ) -> Int {
150150 return x + 1
151151}
152152
153- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
153+ @available ( SwiftStdlib 5 . 5 , * )
154154func incrementAsync( _ x: Int ) async -> Int {
155155 return x + 1
156156}
157157
158- @available ( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * )
158+ @available ( SwiftStdlib 5 . 5 , * )
159159func testAsyncWithConversions( ) async {
160160 _ = bar ( incrementSync)
161161 _ = bar { - $0 }
0 commit comments