@@ -8,6 +8,19 @@ import Builtin
88import Swift
99import _Concurrency
1010
11+ final actor MyDefaultActor {
12+ @_semantics("defaultActor")
13+ nonisolated var unownedExecutor: UnownedSerialExecutor { get }
14+ }
15+ sil_vtable MyDefaultActor {}
16+
17+ actor MyCustomActor : SerialExecutor {
18+ final nonisolated var unownedExecutor: UnownedSerialExecutor { get }
19+ final nonisolated func enqueue(_ job: UnownedJob)
20+ final nonisolated func asUnownedSerialExecutor() -> UnownedSerialExecutor
21+ }
22+ sil_vtable MyCustomActor {}
23+
1124// CHECK: define{{.*}} swiftcc { [[INT]], [[INT]] } @test_none()
1225sil @test_none : $() -> Optional<Builtin.Executor> {
1326bb0:
1932// CHECK: define{{.*}} swiftcc { [[INT]], [[INT]] } @test_some([[INT]] %0, [[INT]] %1)
2033sil @test_some : $(Builtin.Executor) -> Optional<Builtin.Executor> {
2134bb0(%0 : $Builtin.Executor):
22- // CHECK: [[T0 :%.*]] = insertvalue { [[INT]], [[INT]] } undef, [[INT]] %0, 0
23- // CHECK-NEXT: [[T1 :%.*]] = insertvalue { [[INT]], [[INT]] } [[T0 ]], [[INT]] %1, 1
24- // CHECK-NEXT: ret { [[INT]], [[INT]] } [[T1 ]]
35+ // CHECK: [[ONE :%.*]] = insertvalue { [[INT]], [[INT]] } undef, [[INT]] %0, 0
36+ // CHECK-NEXT: [[TWO :%.*]] = insertvalue { [[INT]], [[INT]] } [[ONE ]], [[INT]] %1, 1
37+ // CHECK-NEXT: ret { [[INT]], [[INT]] } [[TWO ]]
2538 %1 = enum $Optional<Builtin.Executor>, #Optional.some, %0 : $Builtin.Executor
2639 return %1 : $Optional<Builtin.Executor>
2740}
41+
42+ // CHECK: define{{.*}} swiftcc { [[INT]], [[INT]] } @test_build_default_actor(%T4test14MyDefaultActorC* %0)
43+ sil @test_build_default_actor : $(@guaranteed MyDefaultActor) -> Builtin.Executor {
44+ bb0(%0 : $MyDefaultActor):
45+ // CHECK: [[T0:%.*]] = ptrtoint %T4test14MyDefaultActorC* %0 to [[INT]]
46+ // CHECK-NEXT: [[ONE:%.*]] = insertvalue { [[INT]], [[INT]] } undef, [[INT]] [[T0]], 0
47+ // CHECK-NEXT: [[TWO:%.*]] = insertvalue { [[INT]], [[INT]] } [[ONE]], [[INT]] 0, 1
48+ // CHECK-NEXT: ret { [[INT]], [[INT]] } [[TWO]]
49+ %1 = builtin "buildDefaultActorExecutorRef"<MyDefaultActor>(%0 : $MyDefaultActor) : $Builtin.Executor
50+ return %1 : $Builtin.Executor
51+ }
52+
53+ // CHECK: define{{.*}} swiftcc { [[INT]], [[INT]] } @test_build_custom_actor(%T4test13MyCustomActorC* %0)
54+ sil @test_build_custom_actor : $(@guaranteed MyCustomActor) -> Builtin.Executor {
55+ bb0(%0 : $MyCustomActor):
56+ // CHECK: [[T0:%.*]] = ptrtoint %T4test13MyCustomActorC* %0 to [[INT]]
57+ // CHECK-NEXT: [[T1:%.*]] = call i8** @"$s4test13MyCustomActorCACs14SerialExecutorAAWl"()
58+ // CHECK-NEXT: [[T2:%.*]] = ptrtoint i8** [[T1]] to [[INT]]
59+ // CHECK: [[ONE:%.*]] = insertvalue { [[INT]], [[INT]] } undef, [[INT]] [[T0]], 0
60+ // CHECK-NEXT: [[TWO:%.*]] = insertvalue { [[INT]], [[INT]] } [[ONE]], [[INT]] [[T2]], 1
61+ // CHECK-NEXT: ret { [[INT]], [[INT]] } [[TWO]]
62+ %1 = builtin "buildOrdinarySerialExecutorRef"<MyCustomActor>(%0 : $MyCustomActor) : $Builtin.Executor
63+ return %1 : $Builtin.Executor
64+ }
0 commit comments