blob: acdd57d781c373f6a4fe26b97396b93352b2db6d [file] [log] [blame]
// RUN: %target-swift-frontend -I %S/../Inputs -emit-silgen -enable-source-import -parse-as-library -enable-resilience %s | FileCheck %s
// RUN: %target-swift-frontend -I %S/../Inputs -emit-sil -enable-source-import -parse-as-library -enable-resilience %s -O | FileCheck --check-prefix=CHECK-OPT %s
import resilient_global
public struct MyEmptyStruct {}
// CHECK-LABEL: sil_global @_Tv17global_resilience13myEmptyGlobalVS_13MyEmptyStruct : $MyEmptyStruct
public var myEmptyGlobal = MyEmptyStruct()
// CHECK-LABEL: sil_global @_Tv17global_resilience19myFixedLayoutGlobalVS_13MyEmptyStruct : $MyEmptyStruct
@_fixed_layout public var myFixedLayoutGlobal = MyEmptyStruct()
// Mutable addressor for resilient global (should not be public?)
// CHECK-LABEL: sil [global_init] @_TF17global_resilienceau13myEmptyGlobalVS_13MyEmptyStruct : $@convention(thin) () -> Builtin.RawPointer
// CHECK: global_addr @_Tv17global_resilience13myEmptyGlobalVS_13MyEmptyStruct
// CHECK: return
// Synthesized getter and setter for our resilient global variable
// CHECK-LABEL: sil @_TF17global_resilienceg13myEmptyGlobalVS_13MyEmptyStruct
// CHECK: function_ref @_TF17global_resilienceau13myEmptyGlobalVS_13MyEmptyStruct
// CHECK: return
// CHECK-LABEL: sil @_TF17global_resiliences13myEmptyGlobalVS_13MyEmptyStruct
// CHECK: function_ref @_TF17global_resilienceau13myEmptyGlobalVS_13MyEmptyStruct
// CHECK: return
// Mutable addressor for fixed-layout global
// CHECK-LABEL: sil [global_init] @_TF17global_resilienceau19myFixedLayoutGlobalVS_13MyEmptyStruct
// CHECK: global_addr @_Tv17global_resilience19myFixedLayoutGlobalVS_13MyEmptyStruct
// CHECK: return
// CHECK-OPT-LABEL: sil private @globalinit_{{.*}}_func0
// CHECK-OPT: alloc_global @_Tv17global_resilience19myFixedLayoutGlobalVS_13MyEmptyStruct
// CHECK-OPT: return
// CHECK-OPT-LABEL: sil [global_init] @_TF17global_resilienceau19myFixedLayoutGlobalVS_13MyEmptyStruct
// CHECK-OPT: global_addr @_Tv17global_resilience19myFixedLayoutGlobalVS_13MyEmptyStruct
// CHECK-OPT: function_ref @globalinit_{{.*}}_func0
// CHECK-OPT: return
// Accessing resilient global from our resilience domain --
// call the addressor directly
// CHECK-LABEL: sil @_TF17global_resilience16getMyEmptyGlobalFT_VS_13MyEmptyStruct
// CHECK: function_ref @_TF17global_resilienceau13myEmptyGlobalVS_13MyEmptyStruct
// CHECK: return
public func getMyEmptyGlobal() -> MyEmptyStruct {
return myEmptyGlobal
}
// Accessing resilient global from a different resilience domain --
// access it with accessors
// CHECK-LABEL: sil @_TF17global_resilience14getEmptyGlobalFT_V16resilient_global20EmptyResilientStruct
// CHECK: function_ref @_TF16resilient_globalg11emptyGlobalVS_20EmptyResilientStruct
// CHECK: return
public func getEmptyGlobal() -> EmptyResilientStruct {
return emptyGlobal
}
// Accessing fixed-layout global from a different resilience domain --
// call the addressor directly
// CHECK-LABEL: sil @_TF17global_resilience20getFixedLayoutGlobalFT_V16resilient_global20EmptyResilientStruct
// CHECK: function_ref @_TF16resilient_globalau17fixedLayoutGlobalVS_20EmptyResilientStruct
// CHECK: return
public func getFixedLayoutGlobal() -> EmptyResilientStruct {
return fixedLayoutGlobal
}