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

sil_stage raw

import Builtin
import Swift
import SwiftShims

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

// [unknown] markers are treated like [dynamic] markers by AccessMarkerElimination.
// We don't remove them for -enforce-exclusivity=checked

// UNCHECKED-LABEL: sil hidden [noinline] [ossa] @f010_initS : $@convention(thin) () -> @owned S {
// UNCHECKED: bb0:
// UNCHECKED:  [[BOX:%.*]] = alloc_box ${ var S }, var, name "s"
// UNCHECKED:  [[ADDRS:%.*]] = project_box [[BOX]] : ${ var S }, 0
// UNCHECKED:  [[NUM:%.*]] = integer_literal $Builtin.Int64, 1
// UNCHECKED-NOT: begin_access
// UNCHECKED:  [[ADDRI:%.*]] = struct_element_addr [[ADDRS]] : $*S, #S.i
// UNCHECKED:  assign [[NUM]] to [[ADDRI]] : $*Builtin.Int64
// UNCHECKED-NOT: end_access
// UNCHECKED-NOT: begin_access
// UNCHECKED:  [[VALS:%.*]] = load [trivial] [[ADDRS]] : $*S
// UNCHECKED-NOT: end_access
// UNCHECKED:  destroy_value [[BOX]] : ${ var S }
// UNCHECKED:  return [[VALS]] : $S
// UNCHECKED-LABEL: } // end sil function 'f010_initS'
//
// CHECKED-LABEL: sil hidden [noinline] [ossa] @f010_initS : $@convention(thin) () -> @owned S {
// CHECKED: bb0:
// CHECKED:  [[BOX:%.*]] = alloc_box ${ var S }, var, name "s"
// CHECKED:  [[ADDRS:%.*]] = project_box [[BOX]] : ${ var S }, 0
// CHECKED:  [[NUM:%.*]] = integer_literal $Builtin.Int64, 1
// CHECKED:  [[ACCESS:%.*]] = begin_access [modify] [unknown] [[ADDRS]]
// CHECKED:  [[ADDRI:%.*]] = struct_element_addr [[ACCESS]] : $*S, #S.i
// CHECKED:  assign [[NUM]] to [[ADDRI]] : $*Builtin.Int64
// CHECKED:  end_access [[ACCESS]]
// CHECKED:  [[ACCESS:%.*]] = begin_access [read] [unknown] [[ADDRS]]
// CHECKED:  [[VALS:%.*]] = load [trivial] [[ACCESS]] : $*S
// CHECKED:  end_access [[ACCESS]]
// CHECKED:  destroy_value [[BOX]] : ${ var S }
// CHECKED:  return [[VALS]] : $S
// CHECKED-LABEL: } // end sil function 'f010_initS'
sil hidden [noinline] [ossa] @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.
//
// UNCHECKED-LABEL: sil hidden [ossa] @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
// UNCHECKED: bb0(%0 : @owned ${ var Builtin.Int64 }):
// UNCHECKED:  [[ADR:%.*]] = project_box %0 : ${ var Builtin.Int64 }, 0
// UNCHECKED:  [[VAL:%.*]] = integer_literal $Builtin.Int64, 42
// UNCHECKED-NOT: begin_access
// UNCHECKED:  store [[VAL]] to [trivial] [[ADR]] : $*Builtin.Int64
// UNCHECKED-NOT: end_access
// UNCHECKED:  destroy_value %0 : ${ var Builtin.Int64 }
// UNCHECKED:  return %{{.*}} : $()
// UNCHECKED-LABEL: } // end sil function 'f020_boxArg'
//
// CHECKED-LABEL: sil hidden [ossa] @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
// CHECKED: bb0(%0 : @owned ${ var Builtin.Int64 }):
// CHECKED:  [[ADR:%.*]] = project_box %0 : ${ var Builtin.Int64 }, 0
// CHECKED:  [[VAL:%.*]] = integer_literal $Builtin.Int64, 42
// CHECKED:  [[ACCESS:%.*]] = begin_access [modify] [unknown] [[ADR]]
// CHECKED:  store [[VAL]] to [trivial] [[ACCESS]] : $*Builtin.Int64
// CHECKED:  end_access [[ACCESS]]
// CHECKED:  destroy_value %0 : ${ var Builtin.Int64 }
// CHECKED:  return %{{.*}} : $()
// CHECKED-LABEL: } // end sil function 'f020_boxArg'
sil hidden [ossa] @f020_boxArg : $@convention(thin) (@owned { var Builtin.Int64 }) -> () {
bb0(%0 : @owned ${ 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 : $()
}
