mirror of
https://github.com/apple/swift.git
synced 2026-10-08 12:50:50 +02:00
The opaque values test coverage I initially added will emit to stdout, which is noisy for people's logs if the test is failing for some other reason.
74 lines
2.7 KiB
Swift
74 lines
2.7 KiB
Swift
// RUN: %target-swift-emit-silgen-ossa -o /dev/null -enable-sil-opaque-values %s
|
|
// RUN: %target-swift-emit-silgen -parse-as-library %s | %FileCheck %s --check-prefix=FRAGILE --check-prefix=CHECK
|
|
// RUN: %target-swift-emit-silgen -enable-library-evolution -parse-as-library %s | %FileCheck %s --check-prefix=RESILIENT --check-prefix=CHECK
|
|
|
|
// RUN: %target-swift-emit-silgen -parse-as-library -enable-testing %s
|
|
// RUN: %target-swift-emit-silgen -parse-as-library -enable-testing -enable-library-evolution %s
|
|
|
|
public let global = 0
|
|
|
|
struct InternalStruct {
|
|
var storedProperty = global
|
|
}
|
|
|
|
// CHECK-LABEL: sil hidden [transparent] [ossa] @$s22fixed_layout_attribute14InternalStructV14storedPropertySivpfi : $@convention(thin) () -> Int
|
|
//
|
|
// ... okay to directly reference the addressor here:
|
|
// CHECK: function_ref @$s22fixed_layout_attribute6globalSivau
|
|
// CHECK: return
|
|
|
|
public struct NonFixedStruct {
|
|
public var storedProperty = global
|
|
}
|
|
|
|
// FRAGILE-LABEL: sil [transparent] [ossa] @$s22fixed_layout_attribute14NonFixedStructV14storedPropertySivpfi : $@convention(thin) () -> Int
|
|
// RESILIENT-LABEL: sil hidden [transparent] [ossa] @$s22fixed_layout_attribute14NonFixedStructV14storedPropertySivpfi : $@convention(thin) () -> Int
|
|
//
|
|
// ... okay to directly reference the addressor here:
|
|
// CHECK: function_ref @$s22fixed_layout_attribute6globalSivau
|
|
// CHECK: return
|
|
|
|
@frozen
|
|
public struct FixedStruct {
|
|
public var storedProperty = global
|
|
}
|
|
|
|
// CHECK-LABEL: sil non_abi [transparent] [serialized] [ossa] @$s22fixed_layout_attribute11FixedStructV14storedPropertySivpfi : $@convention(thin) () -> Int
|
|
//
|
|
// ... a fragile build can still reference the addressor:
|
|
// FRAGILE: function_ref @$s22fixed_layout_attribute6globalSivau
|
|
|
|
// ... a resilient build has to use the getter because the addressor
|
|
// is not public, and the initializer is serialized:
|
|
// RESILIENT: function_ref @$s22fixed_layout_attribute6globalSivg
|
|
|
|
// CHECK: return
|
|
|
|
// This would crash with -enable-testing
|
|
private let privateGlobal = 0
|
|
|
|
struct AnotherInternalStruct {
|
|
var storedProperty = privateGlobal
|
|
}
|
|
|
|
// Static properties in fixed-layout type is still resilient
|
|
|
|
@frozen
|
|
public struct HasStaticProperty {
|
|
public static var staticProperty: Int = 0
|
|
}
|
|
|
|
// CHECK-LABEL: sil [ossa] @$s22fixed_layout_attribute18usesStaticPropertyyyF : $@convention(thin) () -> ()
|
|
// CHECK: function_ref @$s22fixed_layout_attribute17HasStaticPropertyV06staticF0Sivau : $@convention(thin) () -> Builtin.RawPointer
|
|
// CHECK: return
|
|
public func usesStaticProperty() {
|
|
_ = HasStaticProperty.staticProperty
|
|
}
|
|
|
|
// CHECK-LABEL: sil [serialized] [ossa] @$s22fixed_layout_attribute27usesStaticPropertyInlinableyyF : $@convention(thin) () -> ()
|
|
|
|
@inlinable
|
|
public func usesStaticPropertyInlinable() {
|
|
_ = HasStaticProperty.staticProperty
|
|
}
|