2
2
// REQUIRES: concurrency
3
3
// REQUIRES: distributed
4
4
5
+ /// The convention in this test is that the Swift declaration comes before its FileCheck lines.
6
+
5
7
import _Distributed
6
8
7
9
/// Use the existential wrapper as the default actor transport.
8
10
typealias DefaultActorTransport = AnyActorTransport
9
11
10
12
class SomeClass { }
11
13
14
+ enum Err : Error {
15
+ case blah
16
+ }
17
+
12
18
distributed actor MyDistActor {
13
19
var localOnlyField : SomeClass
14
20
@@ -64,6 +70,8 @@ distributed actor MyDistActor {
64
70
// CHECK: br [[RET_BB:bb[0-9]+]]
65
71
66
72
// CHECK: [[FAIL_BB]]:
73
+ // CHECK: [[RESIGN_FN:%[0-9]+]] = witness_method $AnyActorTransport, #ActorTransport.resignIdentity
74
+ // CHECK: = apply [[RESIGN_FN]]
67
75
// CHECK: builtin "destroyDefaultActor"
68
76
// CHECK: br [[RET_BB]]
69
77
@@ -73,6 +81,60 @@ distributed actor MyDistActor {
73
81
74
82
75
83
84
+ init ? ( transport_async_fail: AnyActorTransport , cond: Bool ) async {
85
+ guard cond else { return nil }
86
+ self . localOnlyField = SomeClass ( )
87
+ }
88
+
89
+ // CHECK-LABEL: sil hidden{{.*}} @$s4test11MyDistActorC20transport_async_fail4condACSg12_Distributed03AnyD9TransportV_SbtYacfc : $@convention(method) @async (@in AnyActorTransport, Bool, @owned MyDistActor) -> @owned Optional<MyDistActor> {
90
+ // CHECK: bb0([[TPORT:%[0-9]+]] : $*AnyActorTransport, [[COND:%[0-9]+]] : $Bool, [[SELF:%[0-9]+]] : $MyDistActor):
91
+ // CHECK: cond_br {{%[0-9]+}}, [[SUCCESS_BB:bb[0-9]+]], [[FAIL_BB:bb[0-9]+]]
92
+
93
+ // CHECK: [[SUCCESS_BB]]:
94
+ // CHECK: hop_to_executor {{%[0-9]+}}
95
+ // CHECK: [[READY_FN:%[0-9]+]] = witness_method $AnyActorTransport, #ActorTransport.actorReady
96
+ // CHECK: = apply [[READY_FN]]
97
+ // CHECK: br [[RET_BB:bb[0-9]+]]
98
+
99
+ // CHECK: [[FAIL_BB]]:
100
+ // CHECK: [[RESIGN_FN:%[0-9]+]] = witness_method $AnyActorTransport, #ActorTransport.resignIdentity
101
+ // CHECK: = apply [[RESIGN_FN]]
102
+ // CHECK: builtin "destroyDefaultActor"
103
+ // CHECK: br [[RET_BB]]
104
+
105
+ // CHECK: [[RET_BB]]({{%[0-9]+}} : $Optional<MyDistActor>):
106
+ // CHECK: return
107
+ // CHECK: } // end sil function '$s4test11MyDistActorC20transport_async_fail4condACSg12_Distributed03AnyD9TransportV_SbtYacfc'
108
+
109
+
110
+
111
+ init ? ( transport_async_fail_throws: AnyActorTransport , cond: Bool ) async throws {
112
+ guard cond else { throw Err . blah }
113
+ self . localOnlyField = SomeClass ( )
114
+ }
115
+
116
+ // CHECK-LABEL: sil hidden @$s4test11MyDistActorC27transport_async_fail_throws4condACSg12_Distributed03AnyD9TransportV_SbtYaKcfc : $@convention(method) @async (@in AnyActorTransport, Bool, @owned MyDistActor) -> (@owned Optional<MyDistActor>, @error Error) {
117
+ // CHECK: bb0([[TPORT:%[0-9]+]] : $*AnyActorTransport, [[COND:%[0-9]+]] : $Bool, [[SELF:%[0-9]+]] : $MyDistActor):
118
+ // CHECK: cond_br {{%[0-9]+}}, [[SUCCESS_BB:bb[0-9]+]], [[FAIL_BB:bb[0-9]+]]
119
+
120
+ // CHECK: [[SUCCESS_BB]]:
121
+ // CHECK: hop_to_executor {{%[0-9]+}}
122
+ // CHECK: [[READY_FN:%[0-9]+]] = witness_method $AnyActorTransport, #ActorTransport.actorReady
123
+ // CHECK: = apply [[READY_FN]]
124
+ // CHECK: br [[RET_BB:bb[0-9]+]]
125
+
126
+ // CHECK: [[FAIL_BB]]:
127
+ // CHECK: [[RESIGN_FN:%[0-9]+]] = witness_method $AnyActorTransport, #ActorTransport.resignIdentity
128
+ // CHECK: = apply [[RESIGN_FN]]
129
+ // CHECK: builtin "destroyDefaultActor"
130
+ // CHECK: throw {{%[0-9]+}} : $Error
131
+
132
+ // CHECK: [[RET_BB]]:
133
+ // CHECK: return
134
+ // CHECK: } // end sil function '$s4test11MyDistActorC27transport_async_fail_throws4condACSg12_Distributed03AnyD9TransportV_SbtYaKcfc'
135
+
136
+
137
+
76
138
init ( transport_async: AnyActorTransport , cond: Bool ) async {
77
139
if cond {
78
140
self . localOnlyField = SomeClass ( )
@@ -125,5 +187,3 @@ distributed actor MyDistActor {
125
187
126
188
127
189
}
128
-
129
-
0 commit comments