// RUN: %target-sil-opt -wmo -access-enforcement-wmo %s -enable-sil-verify-all | %FileCheck %s
//
// Test the AccessEnforcementWMO pass in isolation. This ensures that
// no upstream passes have removed SIL-level access markers that are
// required to ensure the pass is not overly optimistic. It also
// checks generated getters and setters are handled as expected.

sil_stage canonical

import Builtin
import Swift
import SwiftShims

var internalGlobal: Int64

public var publicGlobal: Int64

public class C {
  @_hasStorage var setterProp: Int64 { get set }
  @_hasStorage final var finalProp: Int64 { get set }
  @_hasStorage var inlinedProp: Int64 { get set }
  @_hasStorage var internalProp: Int64 { get set }
  @_hasStorage var keyPathProp: Int64 { get set }
  @_hasStorage final var finalKeyPathProp: Int64 { get set }
  @_hasStorage public var publicProp: Int64 { get set }
  init()
  deinit
}

// internalGlobal
sil_global hidden @$s10access_wmo14internalGlobalSivp : $Int64 = {
  %0 = integer_literal $Builtin.Int64, 0          // user: %1
  %initval = struct $Int64 (%0 : $Builtin.Int64)
}


// publicGlobal
sil_global @$s10access_wmo12publicGlobalSivp : $Int64 = {
  %0 = integer_literal $Builtin.Int64, 0          // user: %1
  %initval = struct $Int64 (%0 : $Builtin.Int64)
}

// readGlobal()
// CHECK-LABEL: sil @$s10access_wmo10readGlobalSiyF : $@convention(thin) () -> Int64 {
//
// The internal global is promoted to static.
// CHECK: [[G1:%.]] = global_addr @$s10access_wmo14internalGlobalSivp : $*Int64
// CHECK: begin_access [read] [static] [no_nested_conflict] [[G1]] : $*Int64
//
// The public global remains dynamic.
// CHECK: [[G2:%.*]] = global_addr @$s10access_wmo12publicGlobalSivp : $*Int
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[G2]] : $*Int64
// CHECK-LABEL: } // end sil function '$s10access_wmo10readGlobalSiyF'
sil @$s10access_wmo10readGlobalSiyF : $@convention(thin) () -> Int64 {
bb0:
  %0 = global_addr @$s10access_wmo14internalGlobalSivp : $*Int64
  %1 = begin_access [read] [dynamic] [no_nested_conflict] %0 : $*Int64
  %2 = struct_element_addr %1 : $*Int64, #Int64._value
  %3 = load %2 : $*Builtin.Int64
  end_access %1 : $*Int64
  %5 = global_addr @$s10access_wmo12publicGlobalSivp : $*Int64
  %6 = begin_access [read] [dynamic] [no_nested_conflict] %5 : $*Int64
  %7 = struct_element_addr %6 : $*Int64, #Int64._value
  %8 = load %7 : $*Builtin.Int64
  end_access %6 : $*Int64
  %10 = integer_literal $Builtin.Int1, -1
  %11 = builtin "sadd_with_overflow_Int64"(%3 : $Builtin.Int64, %8 : $Builtin.Int64, %10 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
  %12 = tuple_extract %11 : $(Builtin.Int64, Builtin.Int1), 0
  %13 = tuple_extract %11 : $(Builtin.Int64, Builtin.Int1), 1
  cond_fail %13 : $Builtin.Int1
  %15 = struct $Int64 (%12 : $Builtin.Int64)
  return %15 : $Int64
} // end sil function '$s10access_wmo10readGlobalSiyF'

// setInt(_:_:)
sil [noinline] @$s10access_wmo6setIntyySiz_SitF : $@convention(thin) (@inout Int64, Int64) -> ()

// testAccessGlobal(v:)
// CHECK-LABEL: sil @$s10access_wmo16testAccessGlobal1vySi_tF : $@convention(thin) (Int64) -> () {
// CHECK: [[G1:%.*]] = global_addr @$s10access_wmo14internalGlobalSivp : $*Int64
// CHECK: begin_access [modify] [static] [no_nested_conflict] [[G1]] : $*Int64
// CHECK: [[G2:%.*]] = global_addr @$s10access_wmo12publicGlobalSivp : $*Int64
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict] [[G2]] : $*Int64
// CHECK-LABEL: } // end sil function '$s10access_wmo16testAccessGlobal1vySi_tF'
sil @$s10access_wmo16testAccessGlobal1vySi_tF : $@convention(thin) (Int64) -> () {
// %0                                             // users: %9, %5, %1
bb0(%0 : $Int64):
  %1 = global_addr @$s10access_wmo14internalGlobalSivp : $*Int64
  %2 = begin_access [modify] [dynamic] [no_nested_conflict] %1 : $*Int64
  // function_ref setInt(_:_:)
  %3 = function_ref @$s10access_wmo6setIntyySiz_SitF : $@convention(thin) (@inout Int64, Int64) -> ()
  %4 = apply %3(%2, %0) : $@convention(thin) (@inout Int64, Int64) -> ()
  end_access %2 : $*Int64
  %6 = global_addr @$s10access_wmo12publicGlobalSivp : $*Int64
  %7 = begin_access [modify] [dynamic] [no_nested_conflict] %6 : $*Int64
  %8 = apply %3(%7, %0) : $@convention(thin) (@inout Int64, Int64) -> ()
  end_access %7 : $*Int64
  %10 = tuple ()
  return %10 : $()
} // end sil function '$s10access_wmo16testAccessGlobal1vySi_tF'

// setKeyPath(_:_:_:)
sil [noinline] @$s10access_wmo10setKeyPathyyAA1CC_s017ReferenceWritabledE0CyADSiGSitF : $@convention(thin) (@guaranteed C, @guaranteed ReferenceWritableKeyPath<C, Int64>, Int64) -> ()

// readProp(c:)
//
// See the explanation in access_wmo.swift for why some non-public
// properties cannot currently be promoted to static enforcement.
//
// CHECK-LABEL: sil @$s10access_wmo8readProp1cyAA1CC_tF : $@convention(thin) (@guaranteed C) -> () {
// CHECK: [[E1:%.*]] = ref_element_addr %0 : $C, #C.setterProp
// CHECK: begin_access [read] [static] [no_nested_conflict] [[E1]] : $*Int64
// CHECK: [[E2:%.*]] = ref_element_addr %0 : $C, #C.finalProp
// CHECK: begin_access [read] [static] [no_nested_conflict] [[E2]] : $*Int64
// CHECK: [[E3:%.*]] = ref_element_addr %0 : $C, #C.inlinedProp
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[E3]] : $*Int64
// CHECK: [[E4:%.*]] = ref_element_addr %0 : $C, #C.internalProp
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[E4]] : $*Int64
// CHECK: [[E5:%.*]] = ref_element_addr %0 : $C, #C.keyPathProp
// CHECK: begin_access [read] [static] [no_nested_conflict] [[E5]] : $*Int64
// CHECK: [[E5:%.*]] = ref_element_addr %0 : $C, #C.finalKeyPathProp
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[E5]] : $*Int64
// CHECK: [[E6:%.*]] = ref_element_addr %0 : $C, #C.publicProp
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[E6]] : $*Int64
// CHECK-LABEL: } // end sil function '$s10access_wmo8readProp1cyAA1CC_tF'
sil @$s10access_wmo8readProp1cyAA1CC_tF : $@convention(thin) (@guaranteed C) -> () {
// %0
bb0(%0 : $C):
  %1 = ref_element_addr %0 : $C, #C.setterProp
  %2 = begin_access [read] [dynamic] [no_nested_conflict] %1 : $*Int64
  %3 = struct_element_addr %2 : $*Int64, #Int64._value
  %4 = load %3 : $*Builtin.Int64
  end_access %2 : $*Int64
  %6 = ref_element_addr %0 : $C, #C.finalProp
  %7 = begin_access [read] [dynamic] [no_nested_conflict] %6 : $*Int64
  %8 = struct_element_addr %7 : $*Int64, #Int64._value
  %9 = load %8 : $*Builtin.Int64
  end_access %7 : $*Int64
  %11 = ref_element_addr %0 : $C, #C.inlinedProp
  %12 = begin_access [read] [dynamic] [no_nested_conflict] %11 : $*Int64
  %13 = struct_element_addr %12 : $*Int64, #Int64._value
  %14 = load %13 : $*Builtin.Int64
  end_access %12 : $*Int64
  %16 = ref_element_addr %0 : $C, #C.internalProp
  %17 = begin_access [read] [dynamic] [no_nested_conflict] %16 : $*Int64
  %18 = struct_element_addr %17 : $*Int64, #Int64._value
  %19 = load %18 : $*Builtin.Int64
  end_access %17 : $*Int64
  %21 = ref_element_addr %0 : $C, #C.keyPathProp
  %22 = begin_access [read] [dynamic] [no_nested_conflict] %21 : $*Int64
  %23 = struct_element_addr %22 : $*Int64, #Int64._value
  %24 = load %23 : $*Builtin.Int64
  end_access %22 : $*Int64
  %26 = ref_element_addr %0 : $C, #C.finalKeyPathProp
  %27 = begin_access [read] [dynamic] [no_nested_conflict] %26 : $*Int64
  %28 = struct_element_addr %27 : $*Int64, #Int64._value
  %29 = load %28 : $*Builtin.Int64
  end_access %27 : $*Int64
  %31 = ref_element_addr %0 : $C, #C.publicProp
  %32 = begin_access [read] [dynamic] [no_nested_conflict] %31 : $*Int64
  %33 = struct_element_addr %32 : $*Int64, #Int64._value
  %34 = load %33 : $*Builtin.Int64
  end_access %32 : $*Int64
  %36 = tuple ()
  return %36 : $()
} // end sil function '$s10access_wmo8readProp1cyAA1CC_tF'

// testAccessProp(c:v:)
// CHECK-LABEL: sil @$s10access_wmo14testAccessProp1c1vyAA1CC_SitF : $@convention(thin) (@guaranteed C, Int64) -> () {
// CHECK: bb0(%0 : $C, %1 : $Int64):
// CHECK: [[E1:%.*]] = ref_element_addr %0 : $C, #C.setterProp
// CHECK: begin_access [modify] [static] [no_nested_conflict] [[E1]] : $*Int64
// CHECK: [[E2:%.*]] = ref_element_addr %0 : $C, #C.finalProp
// CHECK: begin_access [modify] [static] [no_nested_conflict] [[E2]] : $*Int64
// CHECK: [[E3:%.*]] = ref_element_addr %0 : $C, #C.inlinedProp
// CHECK: begin_unpaired_access [modify] [dynamic] [[E3]] : $*Int64, %{{.*}} : $*Builtin.UnsafeValueBuffer
// CHECK: [[E4:%.*]] = ref_element_addr %0 : $C, #C.internalProp
// CHECK: begin_unpaired_access [modify] [dynamic] [[E4]] : $*Int64, %{{.*}} : $*Builtin.UnsafeValueBuffer
// CHECK: keypath $ReferenceWritableKeyPath<C, Int64>, (root $C; settable_property $Int64,  id #C.keyPathProp!getter.1 : (C) -> () -> Int64, getter @$s10access_wmo1CC11keyPathPropSivpACTK : $@convention(thin) (@in_guaranteed C) -> @out Int64, setter @$s10access_wmo1CC11keyPathPropSivpACTk : $@convention(thin) (@in_guaranteed Int64, @in_guaranteed C) -> ())
// CHECK: keypath $ReferenceWritableKeyPath<C, Int64>, (root $C; stored_property #C.finalKeyPathProp : $Int64)
// CHECK: [[E5:%.*]] = ref_element_addr %0 : $C, #C.publicProp
// CHECK: begin_unpaired_access [modify] [dynamic] [[E5]] : $*Int64, %{{.*}} : $*Builtin.UnsafeValueBuffer
// CHECK-LABEL: } // end sil function '$s10access_wmo14testAccessProp1c1vyAA1CC_SitF'
sil @$s10access_wmo14testAccessProp1c1vyAA1CC_SitF : $@convention(thin) (@guaranteed C, Int64) -> () {
bb0(%0 : $C, %1 : $Int64):
  %2 = ref_element_addr %0 : $C, #C.setterProp
  %3 = begin_access [modify] [dynamic] [no_nested_conflict] %2 : $*Int64
  store %1 to %3 : $*Int64
  end_access %3 : $*Int64
  %6 = ref_element_addr %0 : $C, #C.finalProp
  %7 = begin_access [modify] [dynamic] [no_nested_conflict] %6 : $*Int64
  // function_ref setInt(_:_:)
  %8 = function_ref @$s10access_wmo6setIntyySiz_SitF : $@convention(thin) (@inout Int64, Int64) -> ()
  %9 = apply %8(%7, %1) : $@convention(thin) (@inout Int64, Int64) -> ()
  end_access %7 : $*Int64
  %11 = alloc_stack $Builtin.UnsafeValueBuffer
  %12 = ref_element_addr %0 : $C, #C.inlinedProp
  begin_unpaired_access [modify] [dynamic] %12 : $*Int64, %11 : $*Builtin.UnsafeValueBuffer
  %14 = mark_dependence %12 : $*Int64 on %0 : $C
  store %1 to %14 : $*Int64
  end_unpaired_access [dynamic] %11 : $*Builtin.UnsafeValueBuffer
  dealloc_stack %11 : $*Builtin.UnsafeValueBuffer
  %18 = alloc_stack $Builtin.UnsafeValueBuffer
  %19 = ref_element_addr %0 : $C, #C.internalProp
  begin_unpaired_access [modify] [dynamic] %19 : $*Int64, %18 : $*Builtin.UnsafeValueBuffer
  %21 = mark_dependence %19 : $*Int64 on %0 : $C
  %22 = apply %8(%21, %1) : $@convention(thin) (@inout Int64, Int64) -> ()
  end_unpaired_access [dynamic] %18 : $*Builtin.UnsafeValueBuffer
  dealloc_stack %18 : $*Builtin.UnsafeValueBuffer
  %25 = keypath $ReferenceWritableKeyPath<C, Int64>, (root $C; settable_property $Int64,  id #C.keyPathProp!getter.1 : (C) -> () -> Int64, getter @$s10access_wmo1CC11keyPathPropSivpACTK : $@convention(thin) (@in_guaranteed C) -> @out Int64, setter @$s10access_wmo1CC11keyPathPropSivpACTk : $@convention(thin) (@in_guaranteed Int64, @in_guaranteed C) -> ())
  // function_ref setKeyPath(_:_:_:)
  %26 = function_ref @$s10access_wmo10setKeyPathyyAA1CC_s017ReferenceWritabledE0CyADSiGSitF : $@convention(thin) (@guaranteed C, @guaranteed ReferenceWritableKeyPath<C, Int64>, Int64) -> ()
  %27 = apply %26(%0, %25, %1) : $@convention(thin) (@guaranteed C, @guaranteed ReferenceWritableKeyPath<C, Int64>, Int64) -> ()
  strong_release %25 : $ReferenceWritableKeyPath<C, Int64>
  %29 = keypath $ReferenceWritableKeyPath<C, Int64>, (root $C; stored_property #C.finalKeyPathProp : $Int64)
  %30 = apply %26(%0, %29, %1) : $@convention(thin) (@guaranteed C, @guaranteed ReferenceWritableKeyPath<C, Int64>, Int64) -> ()
  strong_release %29 : $ReferenceWritableKeyPath<C, Int64>
  %32 = alloc_stack $Builtin.UnsafeValueBuffer
  %33 = ref_element_addr %0 : $C, #C.publicProp
  begin_unpaired_access [modify] [dynamic] %33 : $*Int64, %32 : $*Builtin.UnsafeValueBuffer
  %35 = mark_dependence %33 : $*Int64 on %0 : $C
  %36 = apply %8(%35, %1) : $@convention(thin) (@inout Int64, Int64) -> ()
  end_unpaired_access [dynamic] %32 : $*Builtin.UnsafeValueBuffer
  dealloc_stack %32 : $*Builtin.UnsafeValueBuffer
  %39 = tuple ()
  return %39 : $()
} // end sil function '$s10access_wmo14testAccessProp1c1vyAA1CC_SitF'

// key path getter for C.keyPathProp : C
//
// CHECK-LABEL: sil shared [thunk] @$s10access_wmo1CC11keyPathPropSivpACTK : $@convention(thin) (@in_guaranteed C) -> @out Int64 {
// CHECK: begin_access [read] [static] [no_nested_conflict] %{{.*}} : $*Int64
// CHECK-LABEL: } // end sil function '$s10access_wmo1CC11keyPathPropSivpACTK'
sil shared [thunk] @$s10access_wmo1CC11keyPathPropSivpACTK : $@convention(thin) (@in_guaranteed C) -> @out Int64 {
bb0(%0 : $*Int64, %1 : $*C):
  %2 = load %1 : $*C                              // user: %3
  %3 = ref_element_addr %2 : $C, #C.keyPathProp   // user: %4
  %4 = begin_access [read] [dynamic] [no_nested_conflict] %3 : $*Int64 // users: %6, %5
  %5 = load %4 : $*Int64                          // user: %7
  end_access %4 : $*Int64                         // id: %6
  store %5 to %0 : $*Int64                        // id: %7
  %8 = tuple ()                                   // user: %9
  return %8 : $()                                 // id: %9
} // end sil function '$s10access_wmo1CC11keyPathPropSivpACTK'

// key path setter for C.keyPathProp : C
//
// CHECK-LABEL: sil shared [thunk] @$s10access_wmo1CC11keyPathPropSivpACTk : $@convention(thin) (@in_guaranteed Int64, @in_guaranteed C) -> () {
// CHECK: begin_access [modify] [static] [no_nested_conflict] %{{.*}} : $*Int64
// CHECK-LABEL: } // end sil function '$s10access_wmo1CC11keyPathPropSivpACTk'
sil shared [thunk] @$s10access_wmo1CC11keyPathPropSivpACTk : $@convention(thin) (@in_guaranteed Int64, @in_guaranteed C) -> () {
bb0(%0 : $*Int64, %1 : $*C):
  %2 = load %0 : $*Int64                          // user: %6
  %3 = load %1 : $*C                              // user: %4
  %4 = ref_element_addr %3 : $C, #C.keyPathProp   // user: %5
  %5 = begin_access [modify] [dynamic] [no_nested_conflict] %4 : $*Int64 // users: %7, %6
  store %2 to %5 : $*Int64                        // id: %6
  end_access %5 : $*Int64                         // id: %7
  %8 = tuple ()                                   // user: %9
  return %8 : $()                                 // id: %9
} // end sil function '$s10access_wmo1CC11keyPathPropSivpACTk'

// C.keyPathProp.getter
// CHECK-LABEL: sil hidden [transparent] @$s10access_wmo1CC11keyPathPropSivg : $@convention(method) (@guaranteed C) -> Int64 {
// CHECK: begin_access [read] [static] [no_nested_conflict] %{{.*}} : $*Int64
// CHECK-LABEL: } // end sil function '$s10access_wmo1CC11keyPathPropSivg'
sil hidden [transparent] @$s10access_wmo1CC11keyPathPropSivg : $@convention(method) (@guaranteed C) -> Int64 {
// %0
bb0(%0 : $C):
  %1 = ref_element_addr %0 : $C, #C.keyPathProp   // user: %2
  %2 = begin_access [read] [dynamic] [no_nested_conflict] %1 : $*Int64 // users: %4, %3
  %3 = load %2 : $*Int64                          // user: %5
  end_access %2 : $*Int64                         // id: %4
  return %3 : $Int64                              // id: %5
} // end sil function '$s10access_wmo1CC11keyPathPropSivg'

// variable initialization expression of C.publicProp
sil [transparent] @$s10access_wmo1CC10publicPropSivpfi : $@convention(thin) () -> Int64 {
bb0:
  %0 = integer_literal $Builtin.Int64, 0
  %1 = struct $Int64 (%0 : $Builtin.Int64)
  return %1 : $Int64
} // end sil function '$s10access_wmo1CC10publicPropSivpfi'

// C.publicProp.getter
//
// CHECK-LABEL: sil [transparent] @$s10access_wmo1CC10publicPropSivg : $@convention(method) (@guaranteed C) -> Int64 {
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] %{{.*}} : $*Int64
// CHECK-LABEL: } // end sil function '$s10access_wmo1CC10publicPropSivg'
sil [transparent] @$s10access_wmo1CC10publicPropSivg : $@convention(method) (@guaranteed C) -> Int64 {
// %0
bb0(%0 : $C):
  %1 = ref_element_addr %0 : $C, #C.publicProp    // user: %2
  %2 = begin_access [read] [dynamic] [no_nested_conflict] %1 : $*Int64 // users: %4, %3
  %3 = load %2 : $*Int64                          // user: %5
  end_access %2 : $*Int64                         // id: %4
  return %3 : $Int64                              // id: %5
} // end sil function '$s10access_wmo1CC10publicPropSivg'

// C.publicProp.setter
// CHECK-LABEL: sil [transparent] @$s10access_wmo1CC10publicPropSivs : $@convention(method) (Int64, @guaranteed C) -> () {
// CHECK: bb0(%0 : $Int64, %1 : $C):
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict] %{{.*}} : $*Int64
// CHECK-LABEL: } // end sil function '$s10access_wmo1CC10publicPropSivs'
sil [transparent] @$s10access_wmo1CC10publicPropSivs : $@convention(method) (Int64, @guaranteed C) -> () {
bb0(%0 : $Int64, %1 : $C):
  %2 = ref_element_addr %1 : $C, #C.publicProp    // user: %3
  %3 = begin_access [modify] [dynamic] [no_nested_conflict] %2 : $*Int64 // users: %5, %4
  store %0 to %3 : $*Int64                        // id: %4
  end_access %3 : $*Int64                         // id: %5
  %6 = tuple ()                                   // user: %7
  return %6 : $()                                 // id: %7
} // end sil function '$s10access_wmo1CC10publicPropSivs'

// closure #1 in C.publicProp.materializeForSet
sil shared [transparent] @$s10access_wmo1CC10publicPropSivmytfU_ : $@convention(method) (Builtin.RawPointer, @inout Builtin.UnsafeValueBuffer, @in_guaranteed C, @thick C.Type) -> () {
bb0(%0 : $Builtin.RawPointer, %1 : $*Builtin.UnsafeValueBuffer, %2 : $*C, %3 : $@thick C.Type):
  end_unpaired_access [dynamic] %1 : $*Builtin.UnsafeValueBuffer
  %5 = tuple ()
  return %5 : $()
} // end sil function '$s10access_wmo1CC10publicPropSivmytfU_'

// C.publicProp.materializeForSet
// CHECK-LABEL: sil [transparent] @$s10access_wmo1CC10publicPropSivm : $@convention(method) (Builtin.RawPointer, @inout Builtin.UnsafeValueBuffer, @guaranteed C) -> (Builtin.RawPointer, Optional<Builtin.RawPointer>) {
// CHECK: begin_unpaired_access [modify] [dynamic] %{{.*}} : $*Int64, %{{.*}} : $*Builtin.UnsafeValueBuffer
// CHECK-LABEL: } // end sil function '$s10access_wmo1CC10publicPropSivm'
sil [transparent] @$s10access_wmo1CC10publicPropSivm : $@convention(method) (Builtin.RawPointer, @inout Builtin.UnsafeValueBuffer, @guaranteed C) -> (Builtin.RawPointer, Optional<Builtin.RawPointer>) {
bb0(%0 : $Builtin.RawPointer, %1 : $*Builtin.UnsafeValueBuffer, %2 : $C):
  %3 = ref_element_addr %2 : $C, #C.publicProp
  begin_unpaired_access [modify] [dynamic] %3 : $*Int64, %1 : $*Builtin.UnsafeValueBuffer
  %5 = address_to_pointer %3 : $*Int64 to $Builtin.RawPointer
  // function_ref closure #1 in C.publicProp.materializeForSet
  %6 = function_ref @$s10access_wmo1CC10publicPropSivmytfU_ : $@convention(method) (Builtin.RawPointer, @inout Builtin.UnsafeValueBuffer, @in_guaranteed C, @thick C.Type) -> ()
  %7 = thin_function_to_pointer %6 : $@convention(method) (Builtin.RawPointer, @inout Builtin.UnsafeValueBuffer, @in_guaranteed C, @thick C.Type) -> () to $Builtin.RawPointer
  %8 = enum $Optional<Builtin.RawPointer>, #Optional.some!enumelt.1, %7 : $Builtin.RawPointer
  %9 = tuple (%5 : $Builtin.RawPointer, %8 : $Optional<Builtin.RawPointer>)
  return %9 : $(Builtin.RawPointer, Optional<Builtin.RawPointer>)
} // end sil function '$s10access_wmo1CC10publicPropSivm'
