mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
* De-underscore @frozen for enums * Add @frozen for structs, deprecate @_fixed_layout for them * Switch usage from _fixed_layout to frozen
73 lines
2.7 KiB
Swift
73 lines
2.7 KiB
Swift
// 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
|
|
}
|