Files
swift-mirror/test/Concurrency/taskgroup_cancelAll_from_child.swift
Pavel Yaskevich f6b33c1dc2 [Concurrency] Downgrade mutable captures of inout parameters into a warning in Swift 5 mode
This matches the behavior of local captures.

Resolves: rdar://131855678
2024-07-17 16:54:57 -07:00

35 lines
1.6 KiB
Swift

// RUN: %target-swift-frontend -disable-availability-checking %s -emit-sil -o /dev/null -verify
// RUN: %target-swift-frontend -disable-availability-checking %s -emit-sil -o /dev/null -verify -strict-concurrency=targeted
// RUN: %target-swift-frontend -disable-availability-checking %s -emit-sil -o /dev/null -verify -strict-concurrency=complete
// RUN: %target-swift-frontend -disable-availability-checking %s -emit-sil -o /dev/null -verify -strict-concurrency=complete -enable-upcoming-feature RegionBasedIsolation
// REQUIRES: concurrency
// REQUIRES: asserts
@available(SwiftStdlib 5.1, *)
func test_taskGroup_cancelAll() async {
await withTaskGroup(of: Int.self, returning: Void.self) { group in // expected-note {{parameter 'group' is declared 'inout'}}
group.spawn {
await Task.sleep(3_000_000_000)
let c = Task.isCancelled
print("group task isCancelled: \(c)")
return 0
}
group.spawn { // expected-error {{escaping closure captures 'inout' parameter 'group'}}
group.cancelAll() //expected-warning{{capture of 'group' with non-sendable type 'TaskGroup<Int>' in a `@Sendable` closure}}
//expected-warning@-1{{mutable capture of 'inout' parameter 'group' is not allowed in concurrently-executing code; this is an error in the Swift 6 language mode}}
// expected-note@-2 {{captured here}}
return 0
}
group.spawn { [group] in
group.cancelAll() //expected-warning{{capture of 'group' with non-sendable type 'TaskGroup<Int>' in a `@Sendable` closure}}
return 0
}
_ = await group.next()
}
print("done")
}