Files
swift-mirror/test/Concurrency/dispatch_inference.swift
Doug Gregor f72d721144 DispatchQueue.(sync|asyncAndWait) don't have @Sendable parameters
The blocking nature of these APIs means that the closures passed to
them do not actually escape the concurrency domain of the caller.
Remove the implicit `@Sendable`.
2023-02-06 14:11:27 -08:00

37 lines
903 B
Swift

// RUN: %target-typecheck-verify-swift -disable-availability-checking %import-libdispatch -warn-concurrency
// REQUIRES: concurrency
// REQUIRES: libdispatch
import Dispatch
// Tests the inference of @_unsafeSendable and @MainActor when working with
// the Dispatch library, and specifically, DispatchQueue.
@MainActor func onlyOnMainActor() { }
func testMe() {
DispatchQueue.main.async {
onlyOnMainActor() // okay, due to inference of @MainActor-ness
}
}
func testUnsafeSendableInMainAsync() async {
var x = 5
DispatchQueue.main.async {
x = 17 // expected-error{{mutation of captured var 'x' in concurrently-executing code}}
}
print(x)
}
func testUnsafeSendableInAsync(queue: DispatchQueue) async {
var x = 5
queue.async {
x = 17 // expected-error{{mutation of captured var 'x' in concurrently-executing code}}
}
queue.sync {
x = 17 // okay
}
print(x)
}