|
2 | 2 |
|
3 | 3 | import Builtin
|
4 | 4 |
|
| 5 | +class Klass {} |
| 6 | +@_moveOnly struct MoveOnlyPair { |
| 7 | + var lhs: Klass |
| 8 | + var rhs: Klass |
| 9 | +} |
| 10 | + |
5 | 11 | // CHECK-LABEL: sil [ossa] @test_copy_release_value
|
6 | 12 | // CHECK: bb0([[T0:%[0-9]+]] : @owned $Builtin.NativeObject):
|
7 | 13 | // CHECK-NEXT: [[COPY_RESULT:%.*]] = copy_value [[T0]] : $Builtin.NativeObject
|
@@ -301,3 +307,26 @@ bb0(%0 : @owned $Builtin.NativeObject, %1 : @owned $Builtin.NativeObject):
|
301 | 307 | %9999 = tuple()
|
302 | 308 | return %9999 : $()
|
303 | 309 | }
|
| 310 | + |
| 311 | +// CHECK-LABEL: sil [ossa] @testMarkUnresolvedNonCopyableValueInst : $@convention(thin) (@guaranteed Klass) -> () { |
| 312 | +// CHECK: mark_unresolved_non_copyable_value [consumable_and_assignable] %{{[0-9]+}} : $*MoveOnlyPair |
| 313 | +// CHECK: } // end sil function 'testMarkUnresolvedNonCopyableValueInst' |
| 314 | +sil [ossa] @testMarkUnresolvedNonCopyableValueInst : $@convention(thin) (@guaranteed Klass) -> () { |
| 315 | +bb0(%0 : @guaranteed $Klass): |
| 316 | + %1 = alloc_box ${ var MoveOnlyPair } |
| 317 | + %2 = project_box %1 : ${ var MoveOnlyPair }, 0 |
| 318 | + %3 = mark_unresolved_non_copyable_value [consumable_and_assignable] %2 : $*MoveOnlyPair |
| 319 | + %3c = begin_access [modify] [static] %3 : $*MoveOnlyPair |
| 320 | + %3a = struct_element_addr %3c : $*MoveOnlyPair, #MoveOnlyPair.lhs |
| 321 | + %3b = struct_element_addr %3c : $*MoveOnlyPair, #MoveOnlyPair.rhs |
| 322 | + %0a = copy_value %0 : $Klass |
| 323 | + %0b = copy_value %0 : $Klass |
| 324 | + store %0a to [init] %3a : $*Klass |
| 325 | + store %0b to [init] %3b : $*Klass |
| 326 | + end_access %3c : $*MoveOnlyPair |
| 327 | + |
| 328 | + destroy_value %1 : ${ var MoveOnlyPair } |
| 329 | + |
| 330 | + %9999 = tuple() |
| 331 | + return %9999 : $() |
| 332 | +} |
0 commit comments