mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +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.
66 lines
1.9 KiB
Swift
66 lines
1.9 KiB
Swift
// RUN: %target-swift-frontend -Xllvm -sil-print-types -emit-sil -g %s | %FileCheck %s
|
|
// RUN: %target-swift-frontend -DADDRESS_ONLY -Xllvm -sil-print-types -emit-sil -g %s | %FileCheck %s
|
|
|
|
struct Foo: ~Copyable {
|
|
#if ADDRESS_ONLY
|
|
private var x: Any
|
|
#else
|
|
private var x: Int
|
|
#endif
|
|
}
|
|
|
|
@_silgen_name("use")
|
|
func use(_: inout Foo)
|
|
|
|
// CHECK-LABEL: sil {{.*}} @${{.*}}3bar
|
|
func bar(_ x: consuming Foo, y: consuming Foo, z: consuming Foo) {
|
|
// CHECK: [[X:%.*]] = alloc_stack{{.*}} $Foo, var, name "x"
|
|
|
|
// CHECK: [[USE:%.*]] = function_ref @use
|
|
// CHECK: apply [[USE]]
|
|
// CHECK: debug_value undef : $*Foo, var, name "x"
|
|
use(&x)
|
|
let _ = x
|
|
|
|
// CHECK: debug_value undef : $*Foo, var, name "y"
|
|
// CHECK: debug_value [[X]] : $*Foo, var, name "x"
|
|
x = y
|
|
// CHECK: [[USE:%.*]] = function_ref @use
|
|
// CHECK: apply [[USE]]
|
|
// CHECK: debug_value undef : $*Foo, var, name "x"
|
|
use(&x)
|
|
let _ = x
|
|
|
|
// CHECK: debug_value undef : $*Foo, var, name "z"
|
|
// CHECK: debug_value [[X]] : $*Foo, var, name "x"
|
|
x = z
|
|
// CHECK: [[USE:%.*]] = function_ref @use
|
|
// CHECK: apply [[USE]]
|
|
// CHECK: debug_value undef : $*Foo, var, name "x"
|
|
use(&x)
|
|
}
|
|
|
|
// CHECK-LABEL: sil {{.*}} @${{.*}}10inoutParam
|
|
func inoutParam(_ x: inout Foo, y: consuming Foo, z: consuming Foo) {
|
|
// CHECK: debug_value [[X:%[0-9]+]] : $*Foo, var, name "x"
|
|
|
|
// CHECK: [[USE:%.*]] = function_ref @use
|
|
// CHECK: apply [[USE]]
|
|
// CHECK: debug_value undef : $*Foo, var, name "x"
|
|
use(&x)
|
|
let _ = x
|
|
|
|
// CHECK: debug_value undef : $*Foo, var, name "y"
|
|
// CHECK: debug_value [[X]] : $*Foo, var, name "x"
|
|
x = y
|
|
// CHECK: [[USE:%.*]] = function_ref @use
|
|
// CHECK: apply [[USE]]
|
|
// CHECK: debug_value undef : $*Foo, var, name "x"
|
|
use(&x)
|
|
let _ = x
|
|
|
|
// CHECK: debug_value undef : $*Foo, var, name "z"
|
|
// CHECK: debug_value [[X]] : $*Foo, var, name "x"
|
|
x = z
|
|
}
|