// RUN: %target-swift-emit-silgen -parse-as-library %s | %FileCheck %s --check-prefix=FRAGILE --check-prefix=CHECK
// RUN: %target-swift-emit-silgen -enable-resilience -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-resilience %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

@_fixed_layout
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

@_fixed_layout
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
}
