@@ -49,6 +49,8 @@ struct NonSendableMoveOnlyStruct {
49
49
50
50
sil @constructMoveOnlyStruct : $@convention(thin) () -> @owned NonSendableMoveOnlyStruct
51
51
sil @transferMoveOnlyStruct : $@convention(thin) @async (@guaranteed NonSendableMoveOnlyStruct) -> ()
52
+ sil @transferMoveOnlyStructIndirectly : $@convention(thin) @async (@in_guaranteed NonSendableMoveOnlyStruct) -> ()
53
+ sil @useMoveOnlyStructIndirectly : $@convention(thin) (@in_guaranteed NonSendableMoveOnlyStruct) -> ()
52
54
53
55
struct NonSendableStruct {
54
56
var ns: NonSendableKlass
@@ -176,26 +178,24 @@ bb0:
176
178
return %9999 : $()
177
179
}
178
180
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
+ }
199
199
200
200
sil [ossa] @mark_unresolved_reference_binding_test : $@convention(thin) @async () -> () {
201
201
bb0:
0 commit comments