@@ -49,6 +49,8 @@ struct NonSendableMoveOnlyStruct {
4949
5050sil @constructMoveOnlyStruct : $@convention(thin) () -> @owned NonSendableMoveOnlyStruct
5151sil @transferMoveOnlyStruct : $@convention(thin) @async (@guaranteed NonSendableMoveOnlyStruct) -> ()
52+ sil @transferMoveOnlyStructIndirectly : $@convention(thin) @async (@in_guaranteed NonSendableMoveOnlyStruct) -> ()
53+ sil @useMoveOnlyStructIndirectly : $@convention(thin) (@in_guaranteed NonSendableMoveOnlyStruct) -> ()
5254
5355struct NonSendableStruct {
5456 var ns: NonSendableKlass
@@ -176,26 +178,24 @@ bb0:
176178 return %9999 : $()
177179}
178180
179- // sil [ossa] @mark_unresolved_noncopyable_value_test : $@convention(thin) @async () -> () {
180- // bb0:
181- // %0 = function_ref @constructMoveOnlyStruct : $@convention(thin) () -> @owned NonSendableMoveOnlyStruct
182- // %1 = apply %0() : $@convention(thin) () -> @owned NonSendableMoveOnlyStruct
183- // %box = alloc_box ${ var NonSendableMoveOnlyStruct }
184- // %project = project_box %box : ${ var NonSendableMoveOnlyStruct }, 0
185- // %unresolved = mark_unresolved_non_copyable_value [consumable_and_assignable] %project : $*NonSendableMoveOnlyStruct
186- // store %1 to [init] %unresolved : $*NonSendableMoveOnlyStruct
187-
188- // FIXME: rdar://122773845 substitution replacement type 'NonSendableMoveOnlyStruct' does not conform to protocol 'Copyable'
189- // %4 = function_ref @transferIndirect : $@convention(thin) @async <τ_0_0> (@in_guaranteed τ_0_0) -> ()
190- // apply [caller_isolation=nonisolated] [callee_isolation=global_actor] %4<NonSendableMoveOnlyStruct>(%unresolved) : $@convention(thin) @async <τ_0_0> (@in_guaranteed τ_0_0) -> ()
191- // x-warning @-1 {{transferring value of non-Sendable type 'NonSendableMoveOnlyStruct' from nonisolated context to global actor '<null>'-isolated context; later accesses could race}}
192- // %5 = function_ref @useIndirect : $@convention(thin) <τ_0_0> (@in_guaranteed τ_0_0) -> ()
193- // apply %5<NonSendableMoveOnlyStruct>(%unresolved) : $@convention(thin) <τ_0_0> (@in_guaranteed τ_0_0) -> ()
194- // x-note @-1 {{access here could race}}
195- // destroy_value %box : ${ var NonSendableMoveOnlyStruct }
196- // %9999 = tuple ()
197- // return %9999 : $()
198- // }
181+ sil [ossa] @mark_unresolved_noncopyable_value_test : $@convention(thin) @async () -> () {
182+ bb0:
183+ %0 = function_ref @constructMoveOnlyStruct : $@convention(thin) () -> @owned NonSendableMoveOnlyStruct
184+ %1 = apply %0() : $@convention(thin) () -> @owned NonSendableMoveOnlyStruct
185+ %box = alloc_box ${ var NonSendableMoveOnlyStruct }
186+ %project = project_box %box : ${ var NonSendableMoveOnlyStruct }, 0
187+ %unresolved = mark_unresolved_non_copyable_value [consumable_and_assignable] %project : $*NonSendableMoveOnlyStruct
188+ store %1 to [init] %unresolved : $*NonSendableMoveOnlyStruct
189+ %4 = function_ref @transferMoveOnlyStructIndirectly : $@convention(thin) @async (@in_guaranteed NonSendableMoveOnlyStruct) -> ()
190+ apply [caller_isolation=nonisolated] [callee_isolation=global_actor] %4(%unresolved) : $@convention(thin) @async (@in_guaranteed NonSendableMoveOnlyStruct) -> ()
191+ // expected-warning @-1 {{transferring value of non-Sendable type 'NonSendableMoveOnlyStruct' from nonisolated context to global actor '<null>'-isolated context; later accesses could race}}
192+ %5 = function_ref @useMoveOnlyStructIndirectly : $@convention(thin) (@in_guaranteed NonSendableMoveOnlyStruct) -> ()
193+ apply %5(%unresolved) : $@convention(thin) (@in_guaranteed NonSendableMoveOnlyStruct) -> ()
194+ // expected-note @-1 {{access here could race}}
195+ destroy_value %box : ${ var NonSendableMoveOnlyStruct }
196+ %9999 = tuple ()
197+ return %9999 : $()
198+ }
199199
200200sil [ossa] @mark_unresolved_reference_binding_test : $@convention(thin) @async () -> () {
201201bb0:
0 commit comments