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.
26 lines
888 B
Swift
26 lines
888 B
Swift
// RUN: %target-swift-emit-silgen -Xllvm -sil-print-types %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-runtime
|
|
|
|
public protocol P {}
|
|
extension Int: P {}
|
|
|
|
public class A {}
|
|
public class B: A {
|
|
// CHECK-LABEL: sil [lazy_getter] [noinline] [ossa] @$s16optional_to_bool1BC1x{{[_0-9a-zA-Z]*}}vg
|
|
// CHECK: switch_enum {{%.*}} : $Optional<Int>
|
|
public lazy var x: Int = 0
|
|
// CHECK-LABEL: sil [lazy_getter] [noinline] [ossa] @$s16optional_to_bool1BC1y{{[_0-9a-zA-Z]*}}vg
|
|
// CHECK: switch_enum_addr {{%.*}} : $*Optional<any P>
|
|
public lazy var y: P = 0
|
|
}
|
|
|
|
// Collection casting is not implemented in non-ObjC runtime
|
|
#if _runtime(_ObjC)
|
|
|
|
// CHECK-objc-LABEL: sil [ossa] @$s16optional_to_bool3foo{{[_0-9a-zA-Z]*}}F
|
|
public func foo(x: inout [A]) -> Bool {
|
|
// CHECK-objc: select_enum {{%.*}} : $Optional<Array<B>>
|
|
return x is [B]
|
|
}
|
|
|
|
#endif
|