22// REQUIRES: concurrency
33// REQUIRES: distributed
44
5+ /// The convention in this test is that the Swift declaration comes before its FileCheck lines.
6+
57import _Distributed
68
79/// Use the existential wrapper as the default actor transport.
810typealias DefaultActorTransport = AnyActorTransport
911
1012class SomeClass { }
1113
14+ enum Err : Error {
15+ case blah
16+ }
17+
1218distributed actor MyDistActor {
1319 var localOnlyField : SomeClass
1420
@@ -64,6 +70,8 @@ distributed actor MyDistActor {
6470// CHECK: br [[RET_BB:bb[0-9]+]]
6571
6672// CHECK: [[FAIL_BB]]:
73+ // CHECK: [[RESIGN_FN:%[0-9]+]] = witness_method $AnyActorTransport, #ActorTransport.resignIdentity
74+ // CHECK: = apply [[RESIGN_FN]]
6775// CHECK: builtin "destroyDefaultActor"
6876// CHECK: br [[RET_BB]]
6977
@@ -73,6 +81,60 @@ distributed actor MyDistActor {
7381
7482
7583
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+
76138 init ( transport_async: AnyActorTransport , cond: Bool ) async {
77139 if cond {
78140 self . localOnlyField = SomeClass ( )
@@ -125,5 +187,3 @@ distributed actor MyDistActor {
125187
126188
127189}
128-
129-
0 commit comments