Files
swift-mirror/test/Serialization/Inputs/def_concurrency.sil
Erik Eckstein 6a020f8f15 Stabilize and simplify SIL linkage and serialization
The main point of this change is to make sure that a shared function always has a body: both, in the optimizer pipeline and in the swiftmodule file.
This is important because the compiler always needs to emit code for a shared function. Shared functions cannot be referenced from outside the module.
In several corner cases we missed to maintain this invariant which resulted in unresolved-symbol linker errors.

As side-effect of this change we can drop the shared_external SIL linkage and the IsSerializable flag, which simplifies the serialization and linkage concept.
2022-03-09 15:28:05 +01:00

40 lines
1.2 KiB
Plaintext

sil_stage raw // CHECK: sil_stage canonical
import Builtin
import Swift
actor Act { }
@_transparent public func serialize_all() {
}
// CHECK-LABEL: sil public_external [transparent] @test_hop_to_executor_actor
sil [transparent] [serialized] @test_hop_to_executor_actor : $@convention(thin) (@guaranteed Act) -> () {
bb0(%0 : $Act):
// CHECK: hop_to_executor %0 : $Act
hop_to_executor %0 : $Act
// CHECK: hop_to_executor [mandatory] %0 : $Act
hop_to_executor [mandatory] %0 : $Act
%2 = tuple ()
return %2 : $()
}
// CHECK-LABEL: sil public_external [transparent] @test_hop_to_executor_builtin
sil [transparent] [serialized] @test_hop_to_executor_builtin : $@convention(thin) (@guaranteed Builtin.Executor) -> () {
bb0(%0 : $Builtin.Executor):
// CHECK: hop_to_executor %0 : $Builtin.Executor
hop_to_executor %0 : $Builtin.Executor
%2 = tuple ()
return %2 : $()
}
sil [transparent] [serialized] @$s15def_concurrency13serialize_allyyF : $@convention(thin) () -> () {
bb0:
%0 = function_ref @test_hop_to_executor_actor : $@convention(thin) (@guaranteed Act) -> ()
%1 = function_ref @test_hop_to_executor_builtin : $@convention(thin) (@guaranteed Builtin.Executor) -> ()
%r = tuple ()
return %r : $()
}