mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Type annotations for instruction operands are omitted, e.g. ``` %3 = struct $S(%1, %2) ``` Operand types are redundant anyway and were only used for sanity checking in the SIL parser. But: operand types _are_ printed if the definition of the operand value was not printed yet. This happens: * if the block with the definition appears after the block where the operand's instruction is located * if a block or instruction is printed in isolation, e.g. in a debugger The old behavior can be restored with `-Xllvm -sil-print-types`. This option is added to many existing test files which check for operand types in their check-lines.
40 lines
1.5 KiB
Plaintext
40 lines
1.5 KiB
Plaintext
// RUN: %empty-directory(%t)
|
|
// RUN: %target-sil-opt -sil-print-types %s -emit-sib -o %t/tmp.sib -module-name basic2
|
|
// RUN: %target-sil-opt -sil-print-types %t/tmp.sib -o %t/tmp.2.sib -module-name basic2
|
|
// RUN: %target-sil-opt -sil-print-types %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
|
|
|
|
import Swift
|
|
|
|
class Klass {}
|
|
struct MoveOnlyPair: ~Copyable {
|
|
var lhs: Klass
|
|
var rhs: Klass
|
|
}
|
|
|
|
// CHECK-LABEL: sil [ossa] @testMarkUnresolvedNonCopyableValueInst : $@convention(thin) (@guaranteed Klass) -> () {
|
|
// CHECK: mark_unresolved_non_copyable_value [consumable_and_assignable] %{{[0-9]+}} : $*MoveOnlyPair
|
|
// CHECK: } // end sil function 'testMarkUnresolvedNonCopyableValueInst'
|
|
sil [ossa] @testMarkUnresolvedNonCopyableValueInst : $@convention(thin) (@guaranteed Klass) -> () {
|
|
bb0(%0 : @guaranteed $Klass):
|
|
%1 = alloc_box ${ var MoveOnlyPair }
|
|
%2 = project_box %1 : ${ var MoveOnlyPair }, 0
|
|
%3 = mark_unresolved_non_copyable_value [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 : $()
|
|
}
|