Files
swift-mirror/test/SIL/Parser/actor_isolation.sil
Michael Gottesman ee3027c2ca [sil] Add the ability to mark a function with isolation just so we can write more concurrency tests in SIL.
Specifically, we write a string out like:

sil [isolation "$REPRESENTATION OF ISOLATION"] @function : $@convention(thin) ...

The idea is that by using a string, we avoid parsing issues of the isolation and
have flexibility. I left in the way we put isolation into the comment above
functions so I did not break any tests that rely on it. I also made it so that
we only accept this with sil tests that pass in the flag
"sil-print-function-isolation-info". I am going to for the next release put in a
full real implementation of this that allows for actor isolation to become a
true first class citizen in SIL. But for now this at least lets us write tests
in the short term.

Since this is temporary and behind a flag, I did not add support for
serialization since this is just for writing textual SIL tests.
2025-07-15 13:19:26 -07:00

39 lines
1.6 KiB
Plaintext

// RUN: %target-sil-opt -sil-print-function-isolation-info -enable-objc-interop -enable-sil-verify-all=true %s | %target-sil-opt -sil-print-function-isolation-info -enable-objc-interop -enable-sil-verify-all=true | %FileCheck %s
// REQUIRES: asserts
// CHECK: // func_with_caller_isolation_inheriting
// CHECK: // Isolation: caller_isolation_inheriting
// CHECK: sil [isolation "caller_isolation_inheriting"] @func_with_caller_isolation_inheriting : $@convention(thin) () -> () {
sil [isolation "caller_isolation_inheriting"] @func_with_caller_isolation_inheriting : $@convention(thin) () -> () {
bb0:
%0 = tuple ()
return %0 : $()
}
// CHECK: // func_with_global_actor_isolation
// CHECK: // Isolation: global_actor. type: <null>
// CHECK: sil [isolation "global_actor"] @func_with_global_actor_isolation : $@convention(thin) () -> () {
sil [isolation "global_actor"] @func_with_global_actor_isolation : $@convention(thin) () -> () {
bb0:
%0 = tuple ()
return %0 : $()
}
// CHECK: // func_with_actor_instance_isolation
// CHECK: // Isolation: actor_instance
// CHECK: sil [isolation "actor_instance"] @func_with_actor_instance_isolation : $@convention(thin) () -> () {
sil [isolation "actor_instance"] @func_with_actor_instance_isolation : $@convention(thin) () -> () {
bb0:
%0 = tuple ()
return %0 : $()
}
// CHECK: // func_with_nonisolated_isolation
// CHECK: // Isolation: nonisolated
// CHECK: sil [isolation "nonisolated"] @func_with_nonisolated_isolation : $@convention(thin) () -> () {
sil [isolation "nonisolated"] @func_with_nonisolated_isolation : $@convention(thin) () -> () {
bb0:
%0 = tuple ()
return %0 : $()
}