Commit Graph

612 Commits

Author SHA1 Message Date
Konrad `ktoso` Malawski
09003d6f11 Revert "Merge pull request #77609 from ktoso/wip-task-names" (#79562)
This reverts commit 4ab5d2604f.
2025-02-23 22:59:21 -08:00
Pavel Yaskevich
520c05b1b8 Merge pull request #79508 from xedin/feature-proof-execution-attrs
[Frontend] Rename `NonIsolatedAsyncInheritsIsolationFromContext` feature and add a feature for `@execution`
2025-02-21 09:07:04 -08:00
Konrad `ktoso` Malawski
4ab5d2604f Merge pull request #77609 from ktoso/wip-task-names
[Concurrency] Task names
2025-02-21 22:28:33 +09:00
Pavel Yaskevich
dd1be8f6d4 [Frontend] Hide @execution attribute behind an experimental feature ExecutionAttribute
Since the proposal has not been approved yet we cannot expose
`@execution` attribute.
2025-02-20 00:05:03 -08:00
Pavel Yaskevich
e2ff3308be [Frontend] NFC: Rename NonIsolatedAsyncInheritsIsolationFromContext feature
New name is `AsyncCallerExecution` as stated by the proposal.
2025-02-19 20:00:56 -08:00
Mike Ash
44ff7e59c6 Merge pull request #78817 from mikeash/fix-supersleep
[Concurrency] Fix Task.sleep on values greater than Int64.max.
2025-02-18 21:07:05 -05:00
Arnold Schwaighofer
c71ebeba2a Test async_task_locals_in_task_group_may_need_to_copy.swift fails in check-swift-optimize mode
Disable until someone can take a look

rdar://143894191
2025-02-03 08:11:22 -08:00
Holly Borla
b3275d9db3 Merge pull request #79044 from hborla/default-actor-isolation-fixes
[Concurrency] Two isolation inference changes for default isolation mode.
2025-01-30 16:36:57 +00:00
Holly Borla
28948965dd [Concurrency] Two isolation inference changes for default isolation mode.
1. Non-actor initializers should participate in custom default isolation
   inference. Otherwise, they will not be able to touch the type's stored
   properties to initialize them if those properties have the default
   isolation inferred.
2. All declarations inside actors and distributed actors do not participate
   in default isolation inference; they remain unspecified, so the existing
   isolation inference rules apply.
2025-01-30 11:54:57 +00:00
Konrad `ktoso` Malawski
24094c3b64 Merge pull request #78916 from swiftlang/ktoso-patch-18 2025-01-30 11:43:26 +00:00
Michael Gottesman
d79fcb6d84 [caller-isolation] Teach Sema how to handle isolation of explicit @execution({concurrent,caller}). 2025-01-28 13:48:44 -08:00
Konrad `ktoso` Malawski
12b2835a74 Re-enable async_task_locals_in_task_group_may_need_to_copy.swift
Give this a go on CI
2025-01-25 18:17:03 +00:00
Mike Ash
29efab6ccc [Concurrency] Fix Task.sleep on values greater than Int64.max.
In the Dispatch implementation, clamp the delay to INT64_MAX. Swift's nanoseconds value is unsigned, but we ultimately use it with dispatch_time, which takes a signed int64_t. Extremely large values get interpreted as negative, which results in not sleeping.

INT64_MAX nanoseconds is about 292 years, so it should be difficult to notice a practical effect from sleeping for less time than requested due to the clamping.

rdar://143278824
2025-01-22 12:28:18 -05:00
Michael Gottesman
1eed6bd4fd [concurrency] Add an end<->end test for nonisolated inherits isolation. 2025-01-02 13:18:55 -08:00
Hamish Knight
072e3aae6e [test] Disable isolated_deinit_main_sync.swift for
back-deployment

This test relies on `_swift_task_deinitOnExecutor`, which
is only available in newer runtimes.
2024-12-17 21:36:16 +00:00
Mykola Pokhylets
5ac1cba8d1 Handle versioning of the IsolatedDeinit feature 2024-12-12 16:41:02 +09:00
Mykola Pokhylets
bc80529d02 Revert "Merge pull request #77438 from swiftlang/revert-77364-mpokhylets/non-experimental-isolated-deinit"
This reverts commit 11781a5fd1, reversing
changes made to 2ee2f1eb2c.
2024-12-12 16:41:02 +09:00
Michael Gottesman
ade4fb7f79 [assume-mainactor] Only perform the change for items that are within the current module.
I also added a small runtime test just as a sanity check. We do not change any
codegen here since the change is at the Sema level... but I thought it would be
prudent to at least have a small smoke test.

rdar://140439795
2024-11-22 14:11:30 -08:00
Holly Borla
dc01137314 Merge pull request #77459 from hborla/preconcurrency-downgrade
[Concurrency] Fix preconcurrency downgrade behavior for `Sendable` closures and generic requirements.
2024-11-09 07:18:50 -08:00
Konrad `ktoso` Malawski
906bc697fd Disable async_task_locals_in_task_group_may_need_to_copy.swift while we
investigate failure on simulator
2024-11-09 08:41:58 +09:00
Holly Borla
d2d317a3d7 [Concurrency] Fix preconcurrency downgrade behavior for Sendable closures.
Sendable violations inside `@preconcurrency @Sendable` closures should be
suppressed in minimal checking, and diagnosed as warnings under complete
checking, including the Swift 6 language mode.
2024-11-07 16:02:37 -08:00
Konrad `ktoso` Malawski
302ab1c268 add newly required // REQUIRES: swift_feature_IsolatedDeinit 2024-11-07 21:47:24 +09:00
Konrad `ktoso` Malawski
aadc67ec0e Revert "Make IsolatedDeinit non-experimental" 2024-11-07 09:59:00 +09:00
Rintaro Ishizaki
7bac01e8ce [Tests] Remove swift_feature_IsolatedDeinit 2024-11-05 23:58:15 -08:00
Mykola Pokhylets
c139d1b1a7 Make IsolatedDeinit non-experimental 2024-11-05 12:19:01 +01:00
Konrad `ktoso` Malawski
43839ac5fd Merge pull request #76995 from nickolas-pohilets/mpokhylets/disable-stack-promotion
Disable stack promotion for classes with isolated deinit
2024-11-04 18:07:11 +09:00
Daniel Rodríguez Troitiño
ba68faaed5 [test] Mark tests that use experimental/upcoming features as such
Find all the usages of `--enable-experimental-feature` or
`--enable-upcoming-feature` in the tests and replace some of the
`REQUIRES: asserts` to use `REQUIRES: swift-feature-Foo` instead, which
should correctly apply to depending on the asserts/noasserts mode of the
toolchain for each feature.

Remove some comments that talked about enabling asserts since they don't
apply anymore (but I might had miss some).

All this was done with an automated script, so some formatting weirdness
might happen, but I hope I fixed most of those.

There might be some tests that were `REQUIRES: asserts` that might run
in `noasserts` toolchains now. This will normally be because their
feature went from experimental to upcoming/base and the tests were not
updated.
2024-11-02 11:46:46 -07:00
Mykola Pokhylets
cb7a8d5cfc Disable stack promotion for classes with isolated deinit 2024-10-31 20:43:11 +01:00
Mykola Pokhylets
67ab0d7404 Implement disabling task-local values in isolated deinit
As requested by the LSG during the proposal review.
See https://forums.swift.org/t/accepted-with-modifications-se-0371-isolated-synchronous-deinit/74042
2024-10-28 16:15:21 +01:00
Allan Shortlidge
cb578172ea Tests: Remove -disable-availability-checking in more tests that use concurrency.
Use the `%target-swift-5.1-abi-triple` substitution to compile the tests for
deployment to the minimum OS versions required for use of _Concurrency APIs,
instead of disabling availability checking.
2024-10-19 12:35:20 -07:00
Allan Shortlidge
c02fc4724d Tests: Remove -disable-availability-checking from many Concurrency tests.
Instead, use the `%target-swift-5.1-abi-triple` substitution to compile the tests
for deployment to the minimum OS versions required for use of _Concurrency APIs.
2024-10-18 16:21:51 -07:00
Michael Gottesman
b1750bad1a [concurrency] Implement swift_task_runOnMainActor.
This routine takes a synchronous non-throwing main actor isolated closure
without a result. If we are dynamically on the main actor, we just run the
closure synchronously. Otherwise, we run a new task on the main actor and call
the closure on that.

This builds on top of the previous commit by using
swift_task_isCurrentExecutorWithFlags in the implementation of this function.

To backwards deploy this function on Darwin, I used some tricks from libdispatch
to validate that we are on the main queue.
2024-10-17 11:17:38 -07:00
Mykola Pokhylets
d8694dba1c Added temporary workaround for stack allocation optimization breaking isolated deinit tests in optimized mode 2024-10-10 21:47:58 +02:00
Konrad `ktoso` Malawski
bfba4b66cd [Concurrency] Fix racy test, too sensitive on println ordering
The test only checks Task done and then "deinit" happening, however
there is another print that may happen in between. Since it's racy which
one comes first, on slower instances -- like simulators, it could get in
the way.

Remove the println we're not even checking for but that breaks the
CHECK-NEXT

Resolves rdar://137221764
2024-10-04 16:52:53 +09:00
Yuta Saito
6c97636021 test: Mark isolated_deinit_main_sync as concurrency executable test 2024-10-03 16:49:54 +00:00
Yuta Saito
9bb3bb4a00 [wasm] test: fix actor_recursive_deinit.swift for WASI 2024-10-03 13:04:08 +00:00
Konrad `ktoso` Malawski
e345665dd4 add experimental flag to 3 more tests 2024-09-22 22:58:13 +09:00
Konrad `ktoso` Malawski
a6bc0e6759 temporary -experimental flag for IsolatedDeinit 2024-09-18 12:52:37 +09:00
Konrad `ktoso` Malawski
7d1ce789ad Revert "Revert "Isolated synchronous deinit"" 2024-09-17 17:35:38 +09:00
Jamie
3bea96a310 [stdlib]: Propagate AsyncStream termination to all consumers
As of the changes in https://github.com/swiftlang/swift/pull/41713 to
enable Sendability for AsyncStream, it has been possible to create
multiple stream consumers operating concurrently. This change fixes
behavior in the case that the underlying stream is terminated while
multiple pending continuations are outstanding. Previously such
consumers would have been leaked (never resumed). Now, they are notified
of the stream's termination and resumed appropriately.

Resolves #66541 & #71412
2024-08-20 07:26:18 -05:00
Konrad `ktoso` Malawski
9906199d8e [Concurrency] Harden task group test which is sensitive to timing (#75612) 2024-08-02 06:48:29 +09:00
Ben Barham
d281fb8868 Merge pull request #74883 from finagolfin/droid
[android] Enable several C++ Interop and other tests
2024-07-26 11:18:07 -07:00
Konrad `ktoso` Malawski
423a87e6ca [Concurrency] Add test covering both serial and task executor in same type (#75393) 2024-07-22 02:17:58 -07:00
Finagolfin
15e1c73969 [android][test] Enable several C++ Interop and other tests
Also, fix lit.cfg for running the test suite natively in Android and mark one
SILOptimizer executable_test as such.
2024-07-20 17:56:51 +05:30
Konrad `ktoso` Malawski
a4e66f6159 [Concurrency] rework test to use StdlibUnittest rather than "not" (#75152) 2024-07-11 17:19:32 +09:00
Konrad `ktoso` Malawski
a3e0b173ea [Concurrency] TaskExecutors may be non-swift objects; dont swift_release them (#75059) 2024-07-09 02:55:11 -07:00
Konrad `ktoso` Malawski
b9369bf0b7 [Concurrency] Fix default actor isolation issue in face of TaskExecutor preference (#74658)
* [Concurrency] Fix task excutor handling of default actor isolation

The task executor API did not properly account for taking the default
actor locking into account when running code on it, we just took the job
and ran it without checking with the serial executor at all, which
resulted in potential concurrent executions inside the actor --
violating actor isolation.

Here we change the TaskExecutor enqueue API to accept the "target"
serial executor, which in practice will be either generic or a specific
default actor, and coordinate with it when we perform a
runSynchronously.

The SE proposal needs to be amended to showcase this new API, however
without this change we are introducing races so we must do this before
the API is stable.

* Remove _swift_task_enqueueOnTaskExecutor as we don't use it anymore

* no need for the new protocol requirement

* remove the enqueue(_ job: UnownedJob, isolatedTo unownedSerialExecutor: UnownedSerialExecutor)

Thankfully we dont need it after all

* Don't add swift_defaultActor_enqueue_withTaskExecutor and centralize the task executor getting to enqueue()

* move around extern definitions
2024-07-01 16:42:27 +09:00
Konrad `ktoso` Malawski
edb4d4b463 [Concurrency] Make deinit check test not racy
The test is checking that the task executor deinit runs after task
completes. This deinit is caused on a different thread, and thus is
racing with the main() completing. This is racy because as main() exits,
we just exit the process and may not see the deinit get printed, making
the test look like the deinit "didnt trigger" but it did, just was
"late to the party"

resolves rdar://130528198
2024-06-27 22:50:26 +09:00
Konrad `ktoso` Malawski
2ec717b115 [Concurrency] TaskExecutor ownership fixes (#74000) 2024-06-14 22:56:33 +09:00
Konrad `ktoso` Malawski
fe66c47b8a [docs] Provide more documentation on custom executors with global actors
It could be confusing to adopters who were led to believe by the types
that they should "just" implement the sharedUnownedExecutor property,
but insead they have to implement the unownedExecutor on the specific
actor type.

Adding documentation clarify this as well as a simple test that
exercises this explicitly; We seem to have much coverage of main actor,
but not so much of custom executor global actors.
2024-06-12 12:28:55 +09:00