mirror of
https://github.com/apple/swift.git
synced 2025-12-25 12:15:36 +01:00
the main things still left behind the experimental flag(s) are - move-only classes (guarded by MoveOnlyClasses feature) - noimplicitcopy - the _borrow operator
38 lines
1.4 KiB
Plaintext
38 lines
1.4 KiB
Plaintext
// RUN: %empty-directory(%t)
|
|
// RUN: %target-sil-opt %s -emit-sib -o %t/tmp.sib -module-name basic2
|
|
// RUN: %target-sil-opt %t/tmp.sib -o %t/tmp.2.sib -module-name basic2
|
|
// RUN: %target-sil-opt %t/tmp.2.sib -module-name basic2 -emit-sorted-sil | %FileCheck %s
|
|
|
|
// Once move only is no longer behind a feature flag, merge this into basic2.
|
|
|
|
sil_stage raw
|
|
|
|
class Klass {}
|
|
@_moveOnly struct MoveOnlyPair {
|
|
var lhs: Klass
|
|
var rhs: Klass
|
|
}
|
|
|
|
// CHECK-LABEL: sil [ossa] @testMarkMustCheckInst : $@convention(thin) (@guaranteed Klass) -> () {
|
|
// CHECK: mark_must_check [consumable_and_assignable] %{{[0-9]+}} : $*MoveOnlyPair
|
|
// CHECK: } // end sil function 'testMarkMustCheckInst'
|
|
sil [ossa] @testMarkMustCheckInst : $@convention(thin) (@guaranteed Klass) -> () {
|
|
bb0(%0 : @guaranteed $Klass):
|
|
%1 = alloc_box ${ var MoveOnlyPair }
|
|
%2 = project_box %1 : ${ var MoveOnlyPair }, 0
|
|
%3 = mark_must_check [consumable_and_assignable] %2 : $*MoveOnlyPair
|
|
%3c = begin_access [modify] [static] %3 : $*MoveOnlyPair
|
|
%3a = struct_element_addr %3c : $*MoveOnlyPair, #MoveOnlyPair.lhs
|
|
%3b = struct_element_addr %3c : $*MoveOnlyPair, #MoveOnlyPair.rhs
|
|
%0a = copy_value %0 : $Klass
|
|
%0b = copy_value %0 : $Klass
|
|
store %0a to [init] %3a : $*Klass
|
|
store %0b to [init] %3b : $*Klass
|
|
end_access %3c : $*MoveOnlyPair
|
|
|
|
destroy_value %1 : ${ var MoveOnlyPair }
|
|
|
|
%9999 = tuple()
|
|
return %9999 : $()
|
|
}
|