diff --git a/stdlib/public/Concurrency/Task+immediate.swift.gyb b/stdlib/public/Concurrency/Task+immediate.swift.gyb index 6381db9c968a5..8e48c7f72975b 100644 --- a/stdlib/public/Concurrency/Task+immediate.swift.gyb +++ b/stdlib/public/Concurrency/Task+immediate.swift.gyb @@ -38,9 +38,9 @@ extension Task where Failure == ${FAILURE_TYPE} { public static func startSynchronously( name: String? = nil, priority: TaskPriority? = nil, - @_implicitSelfCapture _ operation: __owned @isolated(any) @escaping () async throws -> Success + @_implicitSelfCapture @_inheritActorContext(always) _ operation: sending @isolated(any) @escaping () async throws -> Success ) -> Task { - immediate(name: name, priority: priority, operation) + immediate(name: name, priority: priority, operation: operation) } /// 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} { /// - operation: the operation to be run immediately upon entering the task. /// - Returns: A reference to the unstructured task which may be awaited on. @available(SwiftStdlib 6.2, *) + @_alwaysEmitIntoClient @discardableResult public static func immediate( name: String? = nil, priority: TaskPriority? = nil, % # NOTE: This closure cannot be 'sending' because we'll trigger ' pattern that the region based isolation checker does not understand how to check' % # In this case: `func syncOnMyGlobalActor() { Task.immediate { @MyGlobalActor in } }` - @_implicitSelfCapture _ operation: __owned @isolated(any) @escaping () async throws -> Success + @_implicitSelfCapture @_inheritActorContext(always) operation: sending @isolated(any) @escaping () async throws -> Success ) -> Task { let builtinSerialExecutor = @@ -188,6 +189,7 @@ extension ${GROUP_TYPE} { /// is semantically equivalent to its basic version which can be /// created using ``${GROUP_TYPE}/addTask``. @available(SwiftStdlib 6.2, *) + @_alwaysEmitIntoClient public func ${METHOD_NAME}( // in ${GROUP_TYPE} name: String? = nil, priority: TaskPriority? = nil, @@ -275,5 +277,7 @@ extension Task where Failure == ${FAILURE_TYPE} { @_silgen_name("swift_task_startOnMainActor") internal func _startTaskOnMainActor(_ task: Builtin.NativeObject) +@available(SwiftStdlib 6.2, *) @_silgen_name("swift_task_immediate") +@usableFromInline internal func _startTaskImmediately(_ task: Builtin.NativeObject, targetExecutor: Builtin.Executor?) diff --git a/test/Concurrency/Runtime/startImmediately.swift b/test/Concurrency/Runtime/startImmediately.swift index 629fa9f20a640..5951ed30a2149 100644 --- a/test/Concurrency/Runtime/startImmediately.swift +++ b/test/Concurrency/Runtime/startImmediately.swift @@ -1,6 +1,3 @@ -// FIXME: Marking this disabled since we're reworking the semantics and the test is a bit racy until we do -// REQUIRES: rdar149506152 - // RUN: %empty-directory(%t) // RUN: %target-build-swift -Xfrontend -disable-availability-checking %s %import-libdispatch -swift-version 6 -o %t/a.out // RUN: %target-codesign %t/a.out diff --git a/test/Concurrency/startImmediatelyIsolation.swift b/test/Concurrency/startImmediatelyIsolation.swift index d864285757a85..fc2d843eb9884 100644 --- a/test/Concurrency/startImmediatelyIsolation.swift +++ b/test/Concurrency/startImmediatelyIsolation.swift @@ -38,3 +38,14 @@ func async() async throws { group.addImmediateTaskUnlessCancelled { () async throws -> Void in } } } + +@available(SwiftStdlib 6.2, *) +actor TestSelfCapture { + func method() {} + + func test() { + Task.immediate { + method() // Ok due to `@_implicitSelfCapture` + } + } +} diff --git a/test/abi/macOS/arm64/concurrency.swift b/test/abi/macOS/arm64/concurrency.swift index fc9420ad6174b..9b52b3ff4ef64 100644 --- a/test/abi/macOS/arm64/concurrency.swift +++ b/test/abi/macOS/arm64/concurrency.swift @@ -393,16 +393,6 @@ Added: _swift_task_getCurrentTaskName Added: _swift_task_immediate Added: _$sScTss5Error_pRs_rlE18startSynchronously4name8priority_ScTyxsAA_pGSSSg_ScPSgxyYaKYAcntFZ Added: _$sScTss5NeverORs_rlE18startSynchronously4name8priority_ScTyxABGSSSg_ScPSgxyYaKYAcntFZ -Added: _$sScG16addImmediateTask4name8priority9operationySSSg_ScPSgxyYaYAcntF -Added: _$sScg31addImmediateTaskUnlessCancelled4name8priority9operationySSSg_ScPSgxyYaKYAcntF -Added: _$sScG31addImmediateTaskUnlessCancelled4name8priority9operationySSSg_ScPSgxyYaYAcntF -Added: _$sScTss5NeverORs_rlE9immediate4name8priority_ScTyxABGSSSg_ScPSgxyYaKYAcntFZ -Added: _$sScTss5Error_pRs_rlE9immediate4name8priority_ScTyxsAA_pGSSSg_ScPSgxyYaKYAcntFZ -Added: _$sScg16addImmediateTask4name8priority9operationySSSg_ScPSgxyYaKYAcntF -Added: _$ss19DiscardingTaskGroupV012addImmediateB04name8priority9operationySSSg_ScPSgyyYaYAcntF -Added: _$ss19DiscardingTaskGroupV012addImmediateB15UnlessCancelled4name8priority9operationySSSg_ScPSgyyYaYAcntF -Added: _$ss27ThrowingDiscardingTaskGroupV012addImmediateC04name8priority9operationySSSg_ScPSgyyYaKYAcntF -Added: _$ss27ThrowingDiscardingTaskGroupV012addImmediateC15UnlessCancelled4name8priority9operationySSSg_ScPSgyyYaKYAcntF // isIsolatingCurrentContext Added: _swift_task_invokeSwiftIsIsolatingCurrentContext diff --git a/test/abi/macOS/x86_64/concurrency.swift b/test/abi/macOS/x86_64/concurrency.swift index 051b537ce5fd2..7cff9d4c6c251 100644 --- a/test/abi/macOS/x86_64/concurrency.swift +++ b/test/abi/macOS/x86_64/concurrency.swift @@ -393,16 +393,6 @@ Added: _swift_task_getCurrentTaskName Added: _swift_task_immediate Added: _$sScTss5Error_pRs_rlE18startSynchronously4name8priority_ScTyxsAA_pGSSSg_ScPSgxyYaKYAcntFZ Added: _$sScTss5NeverORs_rlE18startSynchronously4name8priority_ScTyxABGSSSg_ScPSgxyYaKYAcntFZ -Added: _$sScG16addImmediateTask4name8priority9operationySSSg_ScPSgxyYaYAcntF -Added: _$sScg31addImmediateTaskUnlessCancelled4name8priority9operationySSSg_ScPSgxyYaKYAcntF -Added: _$sScG31addImmediateTaskUnlessCancelled4name8priority9operationySSSg_ScPSgxyYaYAcntF -Added: _$sScTss5NeverORs_rlE9immediate4name8priority_ScTyxABGSSSg_ScPSgxyYaKYAcntFZ -Added: _$sScTss5Error_pRs_rlE9immediate4name8priority_ScTyxsAA_pGSSSg_ScPSgxyYaKYAcntFZ -Added: _$sScg16addImmediateTask4name8priority9operationySSSg_ScPSgxyYaKYAcntF -Added: _$ss19DiscardingTaskGroupV012addImmediateB04name8priority9operationySSSg_ScPSgyyYaYAcntF -Added: _$ss19DiscardingTaskGroupV012addImmediateB15UnlessCancelled4name8priority9operationySSSg_ScPSgyyYaYAcntF -Added: _$ss27ThrowingDiscardingTaskGroupV012addImmediateC04name8priority9operationySSSg_ScPSgyyYaKYAcntF -Added: _$ss27ThrowingDiscardingTaskGroupV012addImmediateC15UnlessCancelled4name8priority9operationySSSg_ScPSgyyYaKYAcntF // isIsolatingCurrentContext Added: _swift_task_invokeSwiftIsIsolatingCurrentContext