// RUN: %target-sil-opt -enable-sil-ownership -mark-uninitialized-fixup %s | %FileCheck %s

sil_stage raw

import Builtin

// CHECK-LABEL: sil @single_bb_single_proj_case : $@convention(thin) () -> () {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Builtin.Int32 }
// CHECK: [[PB:%.*]] = project_box [[BOX]]
// CHECK: mark_uninitialized [rootself] [[PB]]
sil @single_bb_single_proj_case : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Builtin.Int32 }
  %1 = mark_uninitialized [rootself] %0 : ${ var Builtin.Int32 }
  %2 = project_box %1 : ${ var Builtin.Int32 }, 0
  destroy_value %1 : ${ var Builtin.Int32 }
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @single_bb_multiple_proj_case : $@convention(thin) () -> () {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Builtin.Int32 }
// CHECK: [[PB:%.*]] = project_box [[BOX]]
// CHECK: mark_uninitialized [rootself] [[PB]]
// CHECK: project_box [[BOX]]
sil @single_bb_multiple_proj_case : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Builtin.Int32 }
  %1 = mark_uninitialized [rootself] %0 : ${ var Builtin.Int32 }
  %2 = project_box %1 : ${ var Builtin.Int32 }, 0
  %3 = project_box %1 : ${ var Builtin.Int32 }, 0
  destroy_value %1 : ${ var Builtin.Int32 }
  %9999 = tuple()
  return %9999 : $()
}


// CHECK-LABEL: sil @multiple_bb_case : $@convention(thin) () -> () {
// CHECK:   [[BOX:%.*]] = alloc_box ${ var Builtin.Int32 }
// CHECK:   [[PB:%.*]] = project_box [[BOX]]
// CHECK:   mark_uninitialized [rootself] [[PB]]
// CHECK:   br [[NEXT_BB:bb[0-9]+]]
//
// CHECK: [[NEXT_BB]]:
// CHECK:   project_box [[BOX]]
sil @multiple_bb_case : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Builtin.Int32 }
  %1 = mark_uninitialized [rootself] %0 : ${ var Builtin.Int32 }
  %2 = project_box %1 : ${ var Builtin.Int32 }, 0
  br bb1

bb1:
  %3 = project_box %1 : ${ var Builtin.Int32 }, 0
  destroy_value %1 : ${ var Builtin.Int32 }
  %9999 = tuple()
  return %9999 : $()
}

struct Bool {
  var _value: Builtin.Int1
}

// CHECK-LABEL: sil @test_rauw_uses_of_project_box : $@convention(thin) (Builtin.Int1, @thin Bool.Type) -> Bool {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Bool }
// CHECK: [[PB:%.*]] = project_box [[BOX]]
// CHECK: [[MUI:%.*]] = mark_uninitialized [rootself] [[PB]]
// CHECK: struct_element_addr [[MUI]]
// CHECK: load [trivial] [[MUI]]
// CHECK: destroy_value [[BOX]]
sil @test_rauw_uses_of_project_box : $@convention(thin) (Builtin.Int1, @thin Bool.Type) -> Bool {
bb0(%0 : @trivial $Builtin.Int1, %1 : @trivial $@thin Bool.Type):
  %2 = alloc_box ${ var Bool }, var, name "self"
  %3 = mark_uninitialized [rootself] %2 : ${ var Bool }
  %4 = project_box %3 : ${ var Bool }, 0
  debug_value %0 : $Builtin.Int1, let, name "v", argno 1
  %6 = struct_element_addr %4 : $*Bool, #Bool._value
  assign %0 to %6 : $*Builtin.Int1
  %8 = load [trivial] %4 : $*Bool
  destroy_value %3 : ${ var Bool }
  return %8 : $Bool
}

// This is a simulation of the type of callee generated by capture promotion.
sil @capture_promotion_generated_callee : $@convention(thin) (@in Bool) -> ()

// CHECK-LABEL: sil @test_copyvalue_use_of_projectbox : $@convention(thin) (Builtin.Int1) -> () {
// CHECK: bb0([[ARG:%.*]] : @trivial $Builtin.Int1):
// CHECK:   [[BOX:%.*]] = alloc_box ${ var Bool }, var, name "self"
// CHECK:   [[PB:%.*]] = project_box [[BOX]]
// CHECK:   [[MUI:%.*]] = mark_uninitialized [rootself] [[PB]]
// CHECK:   [[BOX_COPY:%.*]] = copy_value [[BOX]]
// CHECK:   [[PB_BOX_COPY:%.*]] = project_box [[BOX_COPY]]
// CHECK:   destroy_value [[BOX_COPY]]
// CHECK:   destroy_value [[BOX]]
sil @test_copyvalue_use_of_projectbox : $@convention(thin) (Builtin.Int1) -> () {
bb0(%0 : @trivial $Builtin.Int1):
  // Initial initialization.
  %1 = alloc_box ${ var Bool }, var, name "self"
  %2 = mark_uninitialized [rootself] %1 : ${ var Bool }
  %3 = project_box %2 : ${ var Bool }, 0
  %4 = struct_element_addr %3 : $*Bool, #Bool._value
  store %0 to [trivial] %4 : $*Builtin.Int1

  // copy + project_box for function_call. This can happen via
  // capture_promotion.
  %5 = function_ref @capture_promotion_generated_callee : $@convention(thin) (@in Bool) -> ()
  %6 = copy_value %2 : ${ var Bool }
  %7 = project_box %6 : ${ var Bool }, 0
  %8 = apply %5(%7) : $@convention(thin) (@in Bool) -> ()
  destroy_value %6 : ${ var Bool }

  // Epilog
  destroy_value %2 : ${ var Bool }
  %9999 = tuple()
  return %9999 : $()
}
