// RUN: %target-sil-opt -access-enforcement-opts -assume-parsing-unqualified-ownership-sil %s | %FileCheck %s

sil_stage canonical

import Builtin
import Swift
import SwiftShims

struct X {
  @sil_stored var i: Int64 { get set }
  init(i: Int64)
  init()
}

var globalX: X

var globalOtherX: X

sil_global hidden @globalX : $X

sil_global hidden @globalOtherX : $X

sil hidden @Xinit : $@convention(method) (@thin X.Type) -> X {
bb0(%0 : $@thin X.Type):
  %1 = alloc_stack $X, var, name "self"
  %2 = integer_literal $Builtin.Int64, 7
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  %4 = struct_element_addr %1 : $*X, #X.i
  store %3 to %4 : $*Int64
  %6 = struct $X (%3 : $Int64)
  dealloc_stack %1 : $*X
  return %6 : $X
}

// func testNestedAccess() {
//   readAndPerform(&globalX) {
//     globalX = X()
//   }
//   modifyAndPerform(&globalX) {
//     let l = globalX
//     _blackHole(l)
//   }
//   modifyAndPerform(&globalX) {
//     globalX.i = 12
//   }
// }
// Preserve begin/end scope for nested conflicts,
// after inlining (read|modify)AndPerform.
//
// CHECK-LABEL: sil hidden @testNestedAccess : $@convention(thin) () -> () {
// CHECK: [[F1:%.*]] = function_ref @testNestedAccessClosure1 : $@convention(thin) () -> ()
// CHECK: [[C1:%.*]] = convert_function [[F1]] : $@convention(thin) () -> () to $@convention(thin) @noescape () -> ()
// CHECK: [[TF1:%.*]] = thin_to_thick_function [[C1]] : $@convention(thin) @noescape () -> () to $@noescape @callee_guaranteed ()
// CHECK: [[A1:%.*]] = begin_access [read] [dynamic] %0 : $*X
// CHECK: apply [[TF1]]() : $@noescape @callee_guaranteed () -> ()
// CHECK: end_access [[A1]] : $*X
// CHECK: [[F2:%.*]] = function_ref @testNestedAccessClosure2 : $@convention(thin) () -> ()
// CHECK: [[C2:%.*]] = convert_function [[F2]] : $@convention(thin) () -> () to $@convention(thin) @noescape () -> ()
// CHECK: [[TF2:%.*]] = thin_to_thick_function [[C2]] : $@convention(thin) @noescape () -> () to $@noescape @callee_guaranteed () -> ()
// CHECK: [[A2:%.*]] = begin_access [modify] [dynamic] %0 : $*X
// CHECK: apply [[TF2]]() : $@noescape @callee_guaranteed () -> ()
// CHECK: end_access [[A2]] : $*X
// CHECK: [[F3:%.*]] = function_ref @testNestedAccessClosure3 : $@convention(thin) () -> ()
// CHECK: [[C3:%.*]] = convert_function [[F3]] : $@convention(thin) () -> () to $@convention(thin) @noescape () -> ()
// CHECK: [[TF3:%.*]] = thin_to_thick_function [[C3]] : $@convention(thin) @noescape () -> () to $@noescape @callee_guaranteed () -> ()
// CHECK: [[A3:%.*]] = begin_access [modify] [dynamic] %0 : $*X
// CHECK: apply [[TF3]]() : $@noescape @callee_guaranteed () -> ()
// CHECK: end_access [[A3]] : $*X
// CHECK-LABEL: } // end sil function 'testNestedAccess'
sil hidden @testNestedAccess : $@convention(thin) () -> () {
bb0:
  %2 = global_addr @globalX: $*X
  %3 = function_ref @testNestedAccessClosure1 : $@convention(thin) () -> ()
  %4 = convert_function %3 : $@convention(thin) () -> () to $@convention(thin) @noescape () -> ()
  %5 = thin_to_thick_function %4 : $@convention(thin) @noescape () -> () to $@noescape @callee_guaranteed () -> ()
  %6 = begin_access [read] [dynamic] %2 : $*X
  %9 = apply %5() : $@noescape @callee_guaranteed () -> ()
  end_access %6 : $*X

  %15 = function_ref @testNestedAccessClosure2 : $@convention(thin) () -> ()
  %16 = convert_function %15 : $@convention(thin) () -> () to $@convention(thin) @noescape () -> ()
  %17 = thin_to_thick_function %16 : $@convention(thin) @noescape () -> () to $@noescape @callee_guaranteed () -> ()
  %18 = begin_access [modify] [dynamic] %2 : $*X
  %21 = apply %17() : $@noescape @callee_guaranteed () -> ()
  end_access %18 : $*X

  %27 = function_ref @testNestedAccessClosure3 : $@convention(thin) () -> ()
  %28 = convert_function %27 : $@convention(thin) () -> () to $@convention(thin) @noescape () -> ()
  %29 = thin_to_thick_function %28 : $@convention(thin) @noescape () -> () to $@noescape @callee_guaranteed () -> ()
  %30 = begin_access [modify] [dynamic] %2 : $*X
  %33 = apply %29() : $@noescape @callee_guaranteed () -> ()
  end_access %30 : $*X
  %36 = tuple ()
  return %36 : $()
}

// CHECK-LABEL: sil private @testNestedAccessClosure1 : $@convention(thin) () -> () {
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict]
// CHECK-LABEL: // end sil function 'testNestedAccessClosure1'
sil private @testNestedAccessClosure1 : $@convention(thin) () -> () {
bb0:
  %0 = global_addr @globalX: $*X
  %1 = metatype $@thin X.Type
  // function_ref X.init()
  %2 = function_ref @Xinit : $@convention(method) (@thin X.Type) -> X
  %3 = apply %2(%1) : $@convention(method) (@thin X.Type) -> X
  %4 = begin_access [modify] [dynamic] %0 : $*X
  store %3 to %4 : $*X
  end_access %4 : $*X
  %7 = tuple ()
  return %7 : $()
}

// CHECK-LABEL: sil private @testNestedAccessClosure2 : $@convention(thin) () -> () {
// CHECK: begin_access [read] [dynamic] [no_nested_conflict]
// CHECK-LABEL: // end sil function 'testNestedAccessClosure2'
sil private @testNestedAccessClosure2 : $@convention(thin) () -> () {
bb0:
  %0 = global_addr @globalX: $*X
  %1 = begin_access [read] [dynamic] %0 : $*X
  %2 = load %1 : $*X
  end_access %1 : $*X
  debug_value %2 : $X, let, name "l"
  %5 = alloc_stack $X
  store %2 to %5 : $*X
  dealloc_stack %5 : $*X
  %10 = tuple ()
  return %10 : $()
}

// CHECK-LABEL: sil private @testNestedAccessClosure3 : $@convention(thin) () -> () {
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict]
// CHECK-LABEL: // end sil function 'testNestedAccessClosure3'
sil private @testNestedAccessClosure3 : $@convention(thin) () -> () {
bb0:
  %0 = global_addr @globalX: $*X
  %1 = integer_literal $Builtin.Int64, 12
  %2 = struct $Int64 (%1 : $Builtin.Int64)
  %3 = begin_access [modify] [dynamic] %0 : $*X
  %4 = struct_element_addr %3 : $*X, #X.i
  store %2 to %4 : $*Int64
  end_access %3 : $*X
  %7 = tuple ()
  return %7 : $()
}

// func testDisjointAccess() {
//   modifyAndPerform(&globalOtherX) {
//     globalX.i = 12 // no-trap
//   }
// }
// Demote disjoint global access to non-nested access.
//
// CHECK-LABEL: sil hidden @testDisjointAccess : $@convention(thin) () -> () {
// CHECK: bb0:
// CHECK:   [[GLOBALX:%.*]] = global_addr @globalOtherX : $*X
// CHECK:   function_ref @testDisjointAccessClosure1 : $@convention(thin) () -> ()
// CHECK:   [[ACCESS:%.*]] = begin_access [modify] [dynamic] [no_nested_conflict] [[GLOBALX]] : $*X
// CHECK:   apply %{{.*}}() : $@noescape @callee_guaranteed () -> ()
// CHECK:   end_access [[ACCESS]] : $*X
// CHECK-LABEL: } // end sil function 'testDisjointAccess'
sil hidden @testDisjointAccess : $@convention(thin) () -> () {
bb0:
  %2 = global_addr @globalOtherX: $*X
  %3 = function_ref @testDisjointAccessClosure1 : $@convention(thin) () -> ()
  %4 = convert_function %3 : $@convention(thin) () -> () to $@convention(thin) @noescape () -> ()
  %5 = thin_to_thick_function %4 : $@convention(thin) @noescape () -> () to $@noescape @callee_guaranteed () -> ()
  %6 = begin_access [modify] [dynamic] %2 : $*X
  %9 = apply %5() : $@noescape @callee_guaranteed () -> ()
  end_access %6 : $*X
  %12 = tuple ()
  return %12 : $()
}

// CHECK-LABEL: sil private @testDisjointAccessClosure1 : $@convention(thin) () -> () {
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict]
// CHECK-LABEL: // end sil function 'testDisjointAccessClosure1'
sil private @testDisjointAccessClosure1 : $@convention(thin) () -> () {
bb0:
  %0 = global_addr @globalX: $*X
  %1 = integer_literal $Builtin.Int64, 12
  %2 = struct $Int64 (%1 : $Builtin.Int64)
  %3 = begin_access [modify] [dynamic] %0 : $*X
  %4 = struct_element_addr %3 : $*X, #X.i
  store %2 to %4 : $*Int64
  end_access %3 : $*X
  %7 = tuple ()
  return %7 : $()
}

// public func testCaptureReadRead() {
//   var x = X()
//   readAndPerform(&x) {
//     _blackHole(x.i) // no-trap
//   }
// }
// Demote both read accesses to non_nested, then remove the local outer access.
//
// CHECK-LABEL: sil @testCaptureReadRead : $@convention(thin) () -> () {
// CHECK-NOT: begin_access
// CHECK-LABEL: } // end sil function 'testCaptureReadRead'
sil @testCaptureReadRead : $@convention(thin) () -> () {
bb0:
  %0 = alloc_stack $X, var, name "x"
  %1 = metatype $@thin X.Type
  %2 = function_ref @Xinit : $@convention(method) (@thin X.Type) -> X
  %3 = apply %2(%1) : $@convention(method) (@thin X.Type) -> X
  store %3 to %0 : $*X
  %5 = function_ref @testCaptureReadReadClosure1 : $@convention(thin) (@inout_aliasable X) -> ()
  %6 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@inout_aliasable X) -> ()
  strong_retain %6 : $@callee_guaranteed () -> ()
  %8 = convert_escape_to_noescape %6 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()
  %9 = begin_access [read] [dynamic] %0 : $*X
  %12 = apply %8() : $@noescape @callee_guaranteed () -> ()
  strong_release %6 : $@callee_guaranteed () -> ()
  end_access %9 : $*X
  strong_release %6 : $@callee_guaranteed () -> ()
  dealloc_stack %0 : $*X
  %18 = tuple ()
  return %18 : $()
}

// CHECK-LABEL: sil private @testCaptureReadReadClosure1 : $@convention(thin) (@inout_aliasable X) -> () {
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] %0 : $*X
// CHECK-LABEL: } // end sil function 'testCaptureReadReadClosure1'
sil private @testCaptureReadReadClosure1 : $@convention(thin) (@inout_aliasable X) -> () {
bb0(%0 : $*X):
  %2 = begin_access [read] [dynamic] %0 : $*X
  %3 = struct_element_addr %2 : $*X, #X.i
  %4 = load %3 : $*Int64
  end_access %2 : $*X
  %6 = alloc_stack $Int64
  store %4 to %6 : $*Int64
  dealloc_stack %6 : $*Int64
  %11 = tuple ()
  return %11 : $()
}

// Without allocBoxToStack:
// public func testCaptureBoxReadRead() {
//   var x = X()
//   readAndPerform(&x) {
//     _blackHole(x.i) // no-trap
//   }
// }
// Demote both read accesses to non_nested, and remove the local outer access.
//
// CHECK-LABEL: sil @testCaptureBoxReadRead : $@convention(thin) () -> () {
// CHECK-NOT: begin_access
// CHECK-LABEL: } // end sil function 'testCaptureBoxReadRead'
sil @testCaptureBoxReadRead : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var X }, var, name "x"
  %1 = project_box %0 : ${ var X }, 0
  %2 = metatype $@thin X.Type
  %3 = function_ref @Xinit : $@convention(method) (@thin X.Type) -> X
  %4 = apply %3(%2) : $@convention(method) (@thin X.Type) -> X
  store %4 to %1 : $*X
  %6 = function_ref @testCaptureBoxReadReadClosure1 : $@convention(thin) (@guaranteed { var X }) -> ()
  strong_retain %0 : ${ var X }
  %8 = partial_apply [callee_guaranteed] %6(%0) : $@convention(thin) (@guaranteed { var X }) -> ()
  %9 = begin_access [read] [dynamic] %1 : $*X
  %12 = apply %8() : $@callee_guaranteed () -> ()
  end_access %9 : $*X
  strong_release %8 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var X }
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil private @testCaptureBoxReadReadClosure1 : $@convention(thin) (@guaranteed { var X }) -> () {
// CHECK: [[BOXADR:%.*]] = project_box %0 : ${ var X }, 0
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] %1 : $*X
// CHECK-LABEL: } // end sil function 'testCaptureBoxReadReadClosure1'
sil private @testCaptureBoxReadReadClosure1 : $@convention(thin) (@guaranteed { var X }) -> () {
bb0(%0 : ${ var X }):
  %1 = project_box %0 : ${ var X }, 0
  %3 = begin_access [read] [dynamic] %1 : $*X
  %4 = struct_element_addr %3 : $*X, #X.i
  %5 = load %4 : $*Int64
  end_access %3 : $*X
  %7 = alloc_stack $Int64
  store %5 to %7 : $*Int64
  dealloc_stack %7 : $*Int64
  %12 = tuple ()
  return %12 : $()
}

// testDoubleCapture()
// public func testDoubleCapture() {
//   var x = 3
//   let c = { x = 7 }
//   // Inside may-escape closure `c`: [read] [dynamic]
//   // Inside never-escape closure: [modify] [dynamic]
//   doTwo(c, { x = 42 })
// }
// Demote each closure access to non_nested.
sil @testDoubleCapture : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64

  %5 = function_ref @testDoubleCaptureClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  %11 = convert_escape_to_noescape %7 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()

  %12 = function_ref @testDoubleCaptureClosure2 : $@convention(thin) (@inout_aliasable Int64) -> ()
  %13 = partial_apply [callee_guaranteed] %12(%1) : $@convention(thin) (@inout_aliasable Int64) -> ()
  %15 = convert_escape_to_noescape %13 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()

  %16 = apply %11() : $@noescape @callee_guaranteed () -> ()
  %17 = apply %15() : $@noescape @callee_guaranteed () -> ()

  strong_release %13 : $@callee_guaranteed () -> ()
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %24 = tuple ()
  return %24 : $()
}

// CHECK-LABEL: sil private @testDoubleCaptureClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: [[BOXADR:%.*]] = project_box %0 : ${ var Int64 }, 0
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict] %1 : $*Int64
// CHECK-LABEL: } // end sil function 'testDoubleCaptureClosure1'
sil private @testDoubleCaptureClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> () {
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  %3 = integer_literal $Builtin.Int64, 7
  %4 = struct $Int64 (%3 : $Builtin.Int64)
  %5 = begin_access [modify] [dynamic] %1 : $*Int64
  store %4 to %5 : $*Int64
  end_access %5 : $*Int64
  %8 = tuple ()
  return %8 : $()
}

// CHECK-LABEL: sil private @testDoubleCaptureClosure2 : $@convention(thin) (@inout_aliasable Int64) -> () {
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict] %0 : $*Int64
// CHECK-LABEL: } // end sil function 'testDoubleCaptureClosure2'
sil private @testDoubleCaptureClosure2 : $@convention(thin) (@inout_aliasable Int64) -> () {
bb0(%0 : $*Int64):
  %2 = integer_literal $Builtin.Int64, 42
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  %4 = begin_access [modify] [dynamic] %0 : $*Int64
  store %3 to %4 : $*Int64
  end_access %4 : $*Int64
  %7 = tuple ()
  return %7 : $()
}

// public func testInoutReadEscapeRead() {
//   var x = 3
//   let c = { let y = x; _blackHole(y) }
//   readAndPerform(&x, closure: c)
//   _blackHole(x)
// }
// Demote read/read access to [no_nested_conflict].
//
// CHECK-LABEL: sil @testInoutReadEscapeRead : $@convention(thin) () -> () {
// CHECK-NOT: begin_access
// CHECK-LABEL: } // end sil function 'testInoutReadEscapeRead'
sil @testInoutReadEscapeRead : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64
  %5 = function_ref @testInoutReadEscapeReadClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  %11 = convert_escape_to_noescape %7 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()
  %12 = begin_access [read] [dynamic] %1 : $*Int64
  %15 = apply %11() : $@noescape @callee_guaranteed () -> ()
  strong_release %7 : $@callee_guaranteed () -> ()
  end_access %12 : $*Int64
  strong_release %7 : $@callee_guaranteed () -> ()
  %20 = begin_access [read] [dynamic] %1 : $*Int64
  %21 = load %20 : $*Int64
  end_access %20 : $*Int64
  %23 = alloc_stack $Int64
  store %21 to %23 : $*Int64
  dealloc_stack %23 : $*Int64
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %30 = tuple ()
  return %30 : $()
}

// CHECK-LABEL: sil private @testInoutReadEscapeReadClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: [[BOXADR:%.*]] = project_box %0 : ${ var Int64 }, 0
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[BOXADR]] : $*Int64
// CHECK-LABEL: } // end sil function 'testInoutReadEscapeReadClosure1'
sil private @testInoutReadEscapeReadClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> () {
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  %3 = begin_access [read] [dynamic] %1 : $*Int64
  %4 = load %3 : $*Int64
  end_access %3 : $*Int64
  debug_value %4 : $Int64, let, name "y"
  %7 = alloc_stack $Int64
  store %4 to %7 : $*Int64
  dealloc_stack %7 : $*Int64
  %12 = tuple ()
  return %12 : $()
}

// public func testInoutReadEscapeWrite() {
//   var x = 3
//   let c = { x = 42 }
//   readAndPerform(&x, closure: c) 
//   _blackHole(x)
// }
// Preserve the scope of the outer inout access. Runtime trap expected.
//
// CHECK-LABEL: sil @testInoutReadEscapeWrite : $@convention(thin) () -> () {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Int64 }, var, name "x"
// CHECK: [[BOXADR:%.*]] = project_box [[BOX]] : ${ var Int64 }, 0
// CHECK: begin_access [read] [dynamic] [[BOXADR]] : $*Int64
// CHECK: apply
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[BOXADR]] : $*Int64
// CHECK-LABEL: } // end sil function 'testInoutReadEscapeWrite'
sil @testInoutReadEscapeWrite : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64
  %5 = function_ref @testInoutReadEscapeWriteClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  %11 = convert_escape_to_noescape %7 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()

  %12 = begin_access [read] [dynamic] %1 : $*Int64
  %15 = apply %11() : $@noescape @callee_guaranteed () -> ()
  strong_release %7 : $@callee_guaranteed () -> ()
  end_access %12 : $*Int64
  strong_release %7 : $@callee_guaranteed () -> ()

  %20 = begin_access [read] [dynamic] %1 : $*Int64
  %21 = load %20 : $*Int64
  end_access %20 : $*Int64
  %23 = alloc_stack $Int64
  store %21 to %23 : $*Int64
  dealloc_stack %23 : $*Int64
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %30 = tuple ()
  return %30 : $()
}

// CHECK-LABEL: sil private @testInoutReadEscapeWriteClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: [[BOXADR:%.*]] = project_box %0 : ${ var Int64 }, 0
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict] %1 : $*Int64
// CHECK-LABEL: } // end sil function 'testInoutReadEscapeWriteClosure1'
sil private @testInoutReadEscapeWriteClosure1 : $@convention(thin) (@guaranteed { var Int64 }) -> () {
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  %3 = integer_literal $Builtin.Int64, 42
  %4 = struct $Int64 (%3 : $Builtin.Int64)
  %5 = begin_access [modify] [dynamic] %1 : $*Int64
  store %4 to %5 : $*Int64
  end_access %5 : $*Int64
  %8 = tuple ()
  return %8 : $()
}

// public func testInoutWriteEscapeRead() {
//   var x = 3
//   let c = { let y = x; _blackHole(y) }
//   modifyAndPerform(&x, closure: c)
//   _blackHole(x)
// }
// Preserve the scope of the outer inout access. Runtime trap expected.
//
// CHECK-LABEL: sil @$S17enforce_with_opts24testInoutWriteEscapeReadyyF : $@convention(thin) () -> () {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Int64 }, var, name "x"
// CHECK: [[BOXADR:%.*]] = project_box [[BOX]] : ${ var Int64 }, 0
// CHECK: begin_access [modify] [dynamic] [[BOXADR]] : $*Int64
// CHECK: apply
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] %1 : $*Int64
// CHECK-LABEL: } // end sil function '$S17enforce_with_opts24testInoutWriteEscapeReadyyF'
sil @$S17enforce_with_opts24testInoutWriteEscapeReadyyF : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64
  // function_ref closure #1 in testInoutWriteEscapeRead()
  %5 = function_ref @$S17enforce_with_opts24testInoutWriteEscapeReadyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  debug_value %7 : $@callee_guaranteed () -> (), let, name "c"
  strong_retain %7 : $@callee_guaranteed () -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  %11 = convert_escape_to_noescape %7 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()
  %12 = begin_access [modify] [dynamic] %1 : $*Int64
  %13 = tuple ()
  %14 = tuple ()
  %15 = apply %11() : $@noescape @callee_guaranteed () -> ()
  %16 = tuple ()
  strong_release %7 : $@callee_guaranteed () -> ()
  end_access %12 : $*Int64
  strong_release %7 : $@callee_guaranteed () -> ()
  %20 = begin_access [read] [dynamic] %1 : $*Int64
  %21 = load %20 : $*Int64
  end_access %20 : $*Int64
  %23 = alloc_stack $Int64
  store %21 to %23 : $*Int64
  dealloc_stack %23 : $*Int64
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %30 = tuple ()
  return %30 : $()
}

// closure #1 in testInoutWriteEscapeRead()
// CHECK-LABEL: sil private @$S17enforce_with_opts24testInoutWriteEscapeReadyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: [[BOXADR:%.*]] = project_box %0 : ${ var Int64 }, 0
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] %1
// CHECK-LABEL: } // end sil function '$S17enforce_with_opts24testInoutWriteEscapeReadyyFyycfU_'
sil private @$S17enforce_with_opts24testInoutWriteEscapeReadyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// %0
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  debug_value_addr %1 : $*Int64, var, name "x", argno 1
  %3 = begin_access [read] [dynamic] %1 : $*Int64
  %4 = load %3 : $*Int64
  end_access %3 : $*Int64
  debug_value %4 : $Int64, let, name "y"
  %7 = alloc_stack $Int64
  store %4 to %7 : $*Int64
  dealloc_stack %7 : $*Int64
  %12 = tuple ()
  return %12 : $()
}

// public func testInoutWriteEscapeWrite() {
//   var x = 3
//   let c = { x = 42 }
//   modifyAndPerform(&x, closure: c)
//   _blackHole(x)
// }
// Preserve the scope of the outer inout access. Runtime trap expected.
//
// CHECK-LABEL: sil @$S17enforce_with_opts020testInoutWriteEscapeF0yyF : $@convention(thin) () -> () {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Int64 }, var, name "x"
// CHECK: [[BOXADR:%.*]] = project_box [[BOX]] : ${ var Int64 }, 0
// CHECK: begin_access [modify] [dynamic] [[BOXADR]] : $*Int64
// CHECK: apply
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[BOXADR]] : $*Int64
// CHECK-LABEL: } // end sil function '$S17enforce_with_opts020testInoutWriteEscapeF0yyF'
sil @$S17enforce_with_opts020testInoutWriteEscapeF0yyF : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64
  // function_ref closure #1 in testInoutWriteEscapeWrite()
  %5 = function_ref @$S17enforce_with_opts020testInoutWriteEscapeF0yyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  debug_value %7 : $@callee_guaranteed () -> (), let, name "c"
  strong_retain %7 : $@callee_guaranteed () -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  %11 = convert_escape_to_noescape %7 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()
  %12 = begin_access [modify] [dynamic] %1 : $*Int64
  %13 = tuple ()
  %14 = tuple ()
  %15 = apply %11() : $@noescape @callee_guaranteed () -> ()
  %16 = tuple ()
  strong_release %7 : $@callee_guaranteed () -> ()
  end_access %12 : $*Int64
  strong_release %7 : $@callee_guaranteed () -> ()
  %20 = begin_access [read] [dynamic] %1 : $*Int64
  %21 = load %20 : $*Int64
  end_access %20 : $*Int64
  %23 = alloc_stack $Int64
  store %21 to %23 : $*Int64
  dealloc_stack %23 : $*Int64
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %30 = tuple ()
  return %30 : $()
}

// CHECK-LABEL: sil private @$S17enforce_with_opts020testInoutWriteEscapeF0yyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: [[BOXADR:%.*]] = project_box %0 : ${ var Int64 }, 0
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict] [[BOXADR]] : $*Int64
// CHECK-LABEL: } // end sil function '$S17enforce_with_opts020testInoutWriteEscapeF0yyFyycfU_'
sil private @$S17enforce_with_opts020testInoutWriteEscapeF0yyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// %0
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  debug_value_addr %1 : $*Int64, var, name "x", argno 1
  %3 = integer_literal $Builtin.Int64, 42
  %4 = struct $Int64 (%3 : $Builtin.Int64)
  %5 = begin_access [modify] [dynamic] %1 : $*Int64
  store %4 to %5 : $*Int64
  end_access %5 : $*Int64
  %8 = tuple ()
  return %8 : $()
}

// testInoutReadNoescapeRead()
// public func testInoutReadNoescapeRead() {
//   var x = 3
//   let c = { let y = x; _blackHole(y) }
//   doOne { readAndPerform(&x, closure: c) }
// }
// The outer inout access is not folded because we the optimizer can't resolve
// the call to the inner closure from the outer closure.
sil @$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyF : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64
  // function_ref closure #1 in testInoutReadNoescapeRead()
  %5 = function_ref @$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  debug_value %7 : $@callee_guaranteed () -> (), let, name "c"
  // function_ref closure #2 in testInoutReadNoescapeRead()
  %9 = function_ref @$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  %11 = partial_apply [callee_guaranteed] %9(%1, %7) : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
  strong_retain %11 : $@callee_guaranteed () -> ()
  %13 = convert_escape_to_noescape %11 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()
  %14 = apply %13() : $@noescape @callee_guaranteed () -> ()
  %15 = tuple ()
  strong_release %11 : $@callee_guaranteed () -> ()
  strong_release %11 : $@callee_guaranteed () -> ()
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %20 = tuple ()
  return %20 : $()
}

// closure #1 in testInoutReadNoescapeRead()
// CHECK-LABEL: sil private @$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: [[BOXADR:%.*]] = project_box %0 : ${ var Int64 }, 0
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] [[BOXADR]] : $*Int64
// CHECK-LABEL: } // end sil function '$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyFyycfU_'
sil private @$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// %0
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  debug_value_addr %1 : $*Int64, var, name "x", argno 1
  %3 = begin_access [read] [dynamic] %1 : $*Int64
  %4 = load %3 : $*Int64
  end_access %3 : $*Int64
  debug_value %4 : $Int64, let, name "y"
  %7 = alloc_stack $Int64
  store %4 to %7 : $*Int64
  dealloc_stack %7 : $*Int64
  %12 = tuple ()
  return %12 : $()
}

// closure #2 in testInoutReadNoescapeRead()
// CHECK-LABEL: sil private @$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> () {
// CHECK: begin_access [read] [dynamic] %0 : $*Int64
// CHECK-LABEL: } // end sil function '$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyFyyXEfU0_'
sil private @$S23enforce_with_opts_nob2s021testInoutReadNoescapeG0yyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> () {
// %0
// %1
bb0(%0 : $*Int64, %1 : $@callee_guaranteed () -> ()):
  debug_value_addr %0 : $*Int64, var, name "x", argno 1
  debug_value %1 : $@callee_guaranteed () -> (), let, name "c", argno 2
  %4 = begin_access [read] [dynamic] %0 : $*Int64
  %5 = tuple ()
  %6 = tuple ()
  %7 = apply %1() : $@callee_guaranteed () -> ()
  %8 = tuple ()
  end_access %4 : $*Int64
  %10 = tuple ()
  return %10 : $()
}

// testInoutReadNoescapeWrite()
// public func testInoutReadNoescapeWrite() {
//   var x = 3
//   let c = { x = 7 }
//   doOne { readAndPerform(&x, closure: c) }
// }
// The outer inout access scope (closure #2) must be preserved.
// Expected to trap at runtime.
sil @$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyF : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64
  // function_ref closure #1 in testInoutReadNoescapeWrite()
  %5 = function_ref @$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  debug_value %7 : $@callee_guaranteed () -> (), let, name "c"
  // function_ref closure #2 in testInoutReadNoescapeWrite()
  %9 = function_ref @$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  %11 = partial_apply [callee_guaranteed] %9(%1, %7) : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
  strong_retain %11 : $@callee_guaranteed () -> ()
  %13 = convert_escape_to_noescape %11 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()
  %14 = apply %13() : $@noescape @callee_guaranteed () -> ()
  %15 = tuple ()
  strong_release %11 : $@callee_guaranteed () -> ()
  strong_release %11 : $@callee_guaranteed () -> ()
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %20 = tuple ()
  return %20 : $()
}

// closure #1 in testInoutReadNoescapeWrite()
// CHECK-LABEL: sil private @$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict] %1 : $*Int64
// CHECK-LABEL: } // end sil function '$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyFyycfU_'
sil private @$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// %0
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  debug_value_addr %1 : $*Int64, var, name "x", argno 1
  %3 = integer_literal $Builtin.Int64, 7
  %4 = struct $Int64 (%3 : $Builtin.Int64)
  %5 = begin_access [modify] [dynamic] %1 : $*Int64
  store %4 to %5 : $*Int64
  end_access %5 : $*Int64
  %8 = tuple ()
  return %8 : $()
}

// closure #2 in testInoutReadNoescapeWrite()
// CHECK-LABEL: sil private @$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> () {
// CHECK: begin_access [read] [dynamic] %0 : $*Int64
// CHECK-LABEL: } // end sil function '$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyFyyXEfU0_'
sil private @$S23enforce_with_opts_nob2s26testInoutReadNoescapeWriteyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> () {
bb0(%0 : $*Int64, %1 : $@callee_guaranteed () -> ()):
  debug_value_addr %0 : $*Int64, var, name "x", argno 1
  debug_value %1 : $@callee_guaranteed () -> (), let, name "c", argno 2
  %4 = begin_access [read] [dynamic] %0 : $*Int64
  %5 = tuple ()
  %6 = tuple ()
  %7 = apply %1() : $@callee_guaranteed () -> ()
  %8 = tuple ()
  end_access %4 : $*Int64
  %10 = tuple ()
  return %10 : $()
}

// testInoutWriteEscapeReadClosure()
// public func testInoutWriteNoescapeReadClosure() {
//   var x = 3
//   let c = { let y = x; _blackHole(y) }
//   doOne { modifyAndPerform(&x, closure: c) }
// }
// The outer inout access scope (closure #2) must be preserved.
// Expected to trap at runtime.
sil @$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyF : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64
  // function_ref closure #1 in testInoutWriteNoescapeReadClosure()
  %5 = function_ref @$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  debug_value %7 : $@callee_guaranteed () -> (), let, name "c"
  // function_ref closure #2 in testInoutWriteNoescapeReadClosure()
  %9 = function_ref @$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  %11 = partial_apply [callee_guaranteed] %9(%1, %7) : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
  strong_retain %11 : $@callee_guaranteed () -> ()
  %13 = convert_escape_to_noescape %11 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()
  %14 = apply %13() : $@noescape @callee_guaranteed () -> ()
  %15 = tuple ()
  strong_release %11 : $@callee_guaranteed () -> ()
  strong_release %11 : $@callee_guaranteed () -> ()
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %20 = tuple ()
  return %20 : $()
}

// closure #1 in testInoutWriteNoescapeReadClosure()
// CHECK-LABEL: sil private @$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: begin_access [read] [dynamic] [no_nested_conflict] %1 : $*Int64
// CHECK-LABEL: } // end sil function '$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyFyycfU_'
sil private @$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// %0
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  debug_value_addr %1 : $*Int64, var, name "x", argno 1
  %3 = begin_access [read] [dynamic] %1 : $*Int64
  %4 = load %3 : $*Int64
  end_access %3 : $*Int64
  debug_value %4 : $Int64, let, name "y"
  %7 = alloc_stack $Int64
  store %4 to %7 : $*Int64
  dealloc_stack %7 : $*Int64
  %12 = tuple ()
  return %12 : $()
}

// closure #2 in testInoutWriteNoescapeReadClosure()
// CHECK-LABEL: sil private @$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> () {
// CHECK: begin_access [modify] [dynamic] %0 : $*Int64
// CHECK-LABEL: } // end sil function '$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyFyyXEfU0_'
sil private @$S23enforce_with_opts_nob2s33testInoutWriteNoescapeReadClosureyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> () {
// %0
// %1
bb0(%0 : $*Int64, %1 : $@callee_guaranteed () -> ()):
  debug_value_addr %0 : $*Int64, var, name "x", argno 1
  debug_value %1 : $@callee_guaranteed () -> (), let, name "c", argno 2
  %4 = begin_access [modify] [dynamic] %0 : $*Int64
  %5 = tuple ()
  %6 = tuple ()
  %7 = apply %1() : $@callee_guaranteed () -> ()
  %8 = tuple ()
  end_access %4 : $*Int64
  %10 = tuple ()
  return %10 : $()
}

// testInoutWriteNoescapeWriteClosure()
// public func testInoutWriteNoescapeWriteClosure() {
//   var x = 3
//   let c = { x = 7 }
//   doOne { modifyAndPerform(&x, closure: c) }
// }
sil @$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyF : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Int64 }, var, name "x"
  %1 = project_box %0 : ${ var Int64 }, 0
  %2 = integer_literal $Builtin.Int64, 3
  %3 = struct $Int64 (%2 : $Builtin.Int64)
  store %3 to %1 : $*Int64
  // function_ref closure #1 in testInoutWriteNoescapeWriteClosure()
  %5 = function_ref @$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  strong_retain %0 : ${ var Int64 }
  %7 = partial_apply [callee_guaranteed] %5(%0) : $@convention(thin) (@guaranteed { var Int64 }) -> ()
  debug_value %7 : $@callee_guaranteed () -> (), let, name "c"
  // function_ref closure #2 in testInoutWriteNoescapeWriteClosure()
  %9 = function_ref @$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
  strong_retain %7 : $@callee_guaranteed () -> ()
  %11 = partial_apply [callee_guaranteed] %9(%1, %7) : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> ()
  strong_retain %11 : $@callee_guaranteed () -> ()
  %13 = convert_escape_to_noescape %11 : $@callee_guaranteed () -> () to $@noescape @callee_guaranteed () -> ()
  %14 = apply %13() : $@noescape @callee_guaranteed () -> ()
  %15 = tuple ()
  strong_release %11 : $@callee_guaranteed () -> ()
  strong_release %11 : $@callee_guaranteed () -> ()
  strong_release %7 : $@callee_guaranteed () -> ()
  strong_release %0 : ${ var Int64 }
  %20 = tuple ()
  return %20 : $()
}

// closure #1 in testInoutWriteNoescapeWriteClosure()
// CHECK-LABEL: sil private @$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// CHECK: begin_access [modify] [dynamic] [no_nested_conflict] %1 : $*Int64
// CHECK-LABEL: } // end sil function '$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyFyycfU_'
sil private @$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyFyycfU_ : $@convention(thin) (@guaranteed { var Int64 }) -> () {
// %0
bb0(%0 : ${ var Int64 }):
  %1 = project_box %0 : ${ var Int64 }, 0
  debug_value_addr %1 : $*Int64, var, name "x", argno 1
  %3 = integer_literal $Builtin.Int64, 7
  %4 = struct $Int64 (%3 : $Builtin.Int64)
  %5 = begin_access [modify] [dynamic] %1 : $*Int64
  store %4 to %5 : $*Int64
  end_access %5 : $*Int64
  %8 = tuple ()
  return %8 : $()
}

// closure #2 in testInoutWriteNoescapeWriteClosure()
// CHECK-LABEL: sil private @$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> () {
// CHECK: begin_access [modify] [dynamic] %0 : $*Int64
// CHECK-LABEL: } // end sil function '$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyFyyXEfU0_'
sil private @$S23enforce_with_opts_nob2s022testInoutWriteNoescapeG7ClosureyyFyyXEfU0_ : $@convention(thin) (@inout_aliasable Int64, @guaranteed @callee_guaranteed () -> ()) -> () {
bb0(%0 : $*Int64, %1 : $@callee_guaranteed () -> ()):
  debug_value_addr %0 : $*Int64, var, name "x", argno 1
  debug_value %1 : $@callee_guaranteed () -> (), let, name "c", argno 2
  %4 = begin_access [modify] [dynamic] %0 : $*Int64
  %5 = tuple ()
  %6 = tuple ()
  %7 = apply %1() : $@callee_guaranteed () -> ()
  %8 = tuple ()
  end_access %4 : $*Int64
  %10 = tuple ()
  return %10 : $()
}
