Skip to content

Commit a64984a

Browse files
authored
Merge pull request swiftlang#81572 from xedin/adopt-inheritActorContextAlways-in-Task-APIs
[stdlib] Adopt `@_inheritActorContext(always)` on `Task.immediate`
2 parents 37e1fc8 + 0598b8c commit a64984a

File tree

5 files changed

+18
-26
lines changed

5 files changed

+18
-26
lines changed

stdlib/public/Concurrency/Task+immediate.swift.gyb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ extension Task where Failure == ${FAILURE_TYPE} {
3838
public static func startSynchronously(
3939
name: String? = nil,
4040
priority: TaskPriority? = nil,
41-
@_implicitSelfCapture _ operation: __owned @isolated(any) @escaping () async throws -> Success
41+
@_implicitSelfCapture @_inheritActorContext(always) _ operation: sending @isolated(any) @escaping () async throws -> Success
4242
) -> Task<Success, ${FAILURE_TYPE}> {
43-
immediate(name: name, priority: priority, operation)
43+
immediate(name: name, priority: priority, operation: operation)
4444
}
4545

4646
/// Create and immediately start running a new task in the context of the calling thread/task.
@@ -66,13 +66,14 @@ extension Task where Failure == ${FAILURE_TYPE} {
6666
/// - operation: the operation to be run immediately upon entering the task.
6767
/// - Returns: A reference to the unstructured task which may be awaited on.
6868
@available(SwiftStdlib 6.2, *)
69+
@_alwaysEmitIntoClient
6970
@discardableResult
7071
public static func immediate(
7172
name: String? = nil,
7273
priority: TaskPriority? = nil,
7374
% # NOTE: This closure cannot be 'sending' because we'll trigger ' pattern that the region based isolation checker does not understand how to check'
7475
% # In this case: `func syncOnMyGlobalActor() { Task.immediate { @MyGlobalActor in } }`
75-
@_implicitSelfCapture _ operation: __owned @isolated(any) @escaping () async throws -> Success
76+
@_implicitSelfCapture @_inheritActorContext(always) operation: sending @isolated(any) @escaping () async throws -> Success
7677
) -> Task<Success, ${FAILURE_TYPE}> {
7778

7879
let builtinSerialExecutor =
@@ -188,6 +189,7 @@ extension ${GROUP_TYPE} {
188189
/// is semantically equivalent to its basic version which can be
189190
/// created using ``${GROUP_TYPE}/addTask``.
190191
@available(SwiftStdlib 6.2, *)
192+
@_alwaysEmitIntoClient
191193
public func ${METHOD_NAME}( // in ${GROUP_TYPE}
192194
name: String? = nil,
193195
priority: TaskPriority? = nil,
@@ -275,5 +277,7 @@ extension Task where Failure == ${FAILURE_TYPE} {
275277
@_silgen_name("swift_task_startOnMainActor")
276278
internal func _startTaskOnMainActor(_ task: Builtin.NativeObject)
277279

280+
@available(SwiftStdlib 6.2, *)
278281
@_silgen_name("swift_task_immediate")
282+
@usableFromInline
279283
internal func _startTaskImmediately(_ task: Builtin.NativeObject, targetExecutor: Builtin.Executor?)

test/Concurrency/Runtime/startImmediately.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// FIXME: Marking this disabled since we're reworking the semantics and the test is a bit racy until we do
2-
// REQUIRES: rdar149506152
3-
41
// RUN: %empty-directory(%t)
52
// RUN: %target-build-swift -Xfrontend -disable-availability-checking %s %import-libdispatch -swift-version 6 -o %t/a.out
63
// RUN: %target-codesign %t/a.out

test/Concurrency/startImmediatelyIsolation.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,14 @@ func async() async throws {
3838
group.addImmediateTaskUnlessCancelled { () async throws -> Void in }
3939
}
4040
}
41+
42+
@available(SwiftStdlib 6.2, *)
43+
actor TestSelfCapture {
44+
func method() {}
45+
46+
func test() {
47+
Task.immediate {
48+
method() // Ok due to `@_implicitSelfCapture`
49+
}
50+
}
51+
}

test/abi/macOS/arm64/concurrency.swift

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -393,16 +393,6 @@ Added: _swift_task_getCurrentTaskName
393393
Added: _swift_task_immediate
394394
Added: _$sScTss5Error_pRs_rlE18startSynchronously4name8priority_ScTyxsAA_pGSSSg_ScPSgxyYaKYAcntFZ
395395
Added: _$sScTss5NeverORs_rlE18startSynchronously4name8priority_ScTyxABGSSSg_ScPSgxyYaKYAcntFZ
396-
Added: _$sScG16addImmediateTask4name8priority9operationySSSg_ScPSgxyYaYAcntF
397-
Added: _$sScg31addImmediateTaskUnlessCancelled4name8priority9operationySSSg_ScPSgxyYaKYAcntF
398-
Added: _$sScG31addImmediateTaskUnlessCancelled4name8priority9operationySSSg_ScPSgxyYaYAcntF
399-
Added: _$sScTss5NeverORs_rlE9immediate4name8priority_ScTyxABGSSSg_ScPSgxyYaKYAcntFZ
400-
Added: _$sScTss5Error_pRs_rlE9immediate4name8priority_ScTyxsAA_pGSSSg_ScPSgxyYaKYAcntFZ
401-
Added: _$sScg16addImmediateTask4name8priority9operationySSSg_ScPSgxyYaKYAcntF
402-
Added: _$ss19DiscardingTaskGroupV012addImmediateB04name8priority9operationySSSg_ScPSgyyYaYAcntF
403-
Added: _$ss19DiscardingTaskGroupV012addImmediateB15UnlessCancelled4name8priority9operationySSSg_ScPSgyyYaYAcntF
404-
Added: _$ss27ThrowingDiscardingTaskGroupV012addImmediateC04name8priority9operationySSSg_ScPSgyyYaKYAcntF
405-
Added: _$ss27ThrowingDiscardingTaskGroupV012addImmediateC15UnlessCancelled4name8priority9operationySSSg_ScPSgyyYaKYAcntF
406396

407397
// isIsolatingCurrentContext
408398
Added: _swift_task_invokeSwiftIsIsolatingCurrentContext

test/abi/macOS/x86_64/concurrency.swift

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -393,16 +393,6 @@ Added: _swift_task_getCurrentTaskName
393393
Added: _swift_task_immediate
394394
Added: _$sScTss5Error_pRs_rlE18startSynchronously4name8priority_ScTyxsAA_pGSSSg_ScPSgxyYaKYAcntFZ
395395
Added: _$sScTss5NeverORs_rlE18startSynchronously4name8priority_ScTyxABGSSSg_ScPSgxyYaKYAcntFZ
396-
Added: _$sScG16addImmediateTask4name8priority9operationySSSg_ScPSgxyYaYAcntF
397-
Added: _$sScg31addImmediateTaskUnlessCancelled4name8priority9operationySSSg_ScPSgxyYaKYAcntF
398-
Added: _$sScG31addImmediateTaskUnlessCancelled4name8priority9operationySSSg_ScPSgxyYaYAcntF
399-
Added: _$sScTss5NeverORs_rlE9immediate4name8priority_ScTyxABGSSSg_ScPSgxyYaKYAcntFZ
400-
Added: _$sScTss5Error_pRs_rlE9immediate4name8priority_ScTyxsAA_pGSSSg_ScPSgxyYaKYAcntFZ
401-
Added: _$sScg16addImmediateTask4name8priority9operationySSSg_ScPSgxyYaKYAcntF
402-
Added: _$ss19DiscardingTaskGroupV012addImmediateB04name8priority9operationySSSg_ScPSgyyYaYAcntF
403-
Added: _$ss19DiscardingTaskGroupV012addImmediateB15UnlessCancelled4name8priority9operationySSSg_ScPSgyyYaYAcntF
404-
Added: _$ss27ThrowingDiscardingTaskGroupV012addImmediateC04name8priority9operationySSSg_ScPSgyyYaKYAcntF
405-
Added: _$ss27ThrowingDiscardingTaskGroupV012addImmediateC15UnlessCancelled4name8priority9operationySSSg_ScPSgyyYaKYAcntF
406396

407397
// isIsolatingCurrentContext
408398
Added: _swift_task_invokeSwiftIsIsolatingCurrentContext

0 commit comments

Comments
 (0)