// RUN: %target-sil-opt -enforce-exclusivity=checked -emit-sorted-sil -access-marker-elim %s | %FileCheck %s

sil_stage raw

import Builtin
import Swift
import SwiftShims

public struct S {
  @sil_stored var i: Builtin.Int64 { get set }
  init(i: Int)
}

// CHECK-LABEL: sil hidden [noinline] @f010_initS : $@convention(thin) () -> @owned S {
// CHECK: bb0:
// CHECK:  %[[BOX:.*]] = alloc_box ${ var S }, var, name "s"
// CHECK:  %[[ADDRS:.*]] = project_box %[[BOX]] : ${ var S }, 0
// CHECK:  %[[NUM:.*]] = integer_literal $Builtin.Int64, 1
// CHECK-NOT: begin_access
// CHECK:  %[[ADDRI:.*]] = struct_element_addr %[[ADDRS]] : $*S, #S.i
// CHECK:  assign %[[NUM]] to %[[ADDRI]] : $*Builtin.Int64
// CHECK-NOT: end_access
// CHECK-NOT: begin_access
// CHECK:  %[[VALS:.*]] = load [trivial] %[[ADDRS]] : $*S
// CHECK-NOT: end_access
// CHECK:  destroy_value %[[BOX]] : ${ var S }
// CHECK:  return %[[VALS]] : $S
// CHECK-LABEL: } // end sil function 'f010_initS'
sil hidden [noinline] @f010_initS : $@convention(thin) () -> @owned S {
bb0:
  %0 = alloc_box ${ var S }, var, name "s"
  %1 = project_box %0 : ${ var S }, 0
  %2 = integer_literal $Builtin.Int64, 1
  %3 = begin_access [modify] [unknown] %1 : $*S
  %4 = struct_element_addr %3 : $*S, #S.i
  assign %2 to %4 : $*Builtin.Int64
  end_access %3 : $*S
  %7 = begin_access [read] [unknown] %1 : $*S
  %8 = load [trivial] %7 : $*S
  end_access %7 : $*S
  destroy_value %0 : ${ var S }
  return %8 : $S
}

// Test that box arguments are dynamic.
// And since inactive elimination currently eliminates all dynamic markers,
// they are gone from the output.
//
// CHECK-LABEL: sil hidden @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
// CHECK: bb0(%0 : ${ var Builtin.Int64 }):
// CHECK:  [[ADR:%.*]] = project_box %0 : ${ var Builtin.Int64 }, 0
// CHECK:  [[VAL:%.*]] = integer_literal $Builtin.Int64, 42
// CHECK:  store [[VAL]] to [trivial] [[ADR]] : $*Builtin.Int64
// CHECK:  destroy_value %0 : ${ var Builtin.Int64 }
// CHECK:  return %{{.*}} : $()
// CHECK-LABEL: } // end sil function 'f020_boxArg'
sil hidden @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
bb0(%0 : ${ var Builtin.Int64 }):
  %1 = project_box %0 : ${ var Builtin.Int64 }, 0
  %3 = integer_literal $Builtin.Int64, 42
  %5 = begin_access [modify] [unknown] %1 : $*Builtin.Int64
  store %3 to [trivial] %5 : $*Builtin.Int64
  end_access %5 : $*Builtin.Int64
  destroy_value %0 : ${ var Builtin.Int64 }
  %9 = tuple ()
  return %9 : $()
}
