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

sil_stage raw

import Builtin

// CHECK-LABEL: sil [ossa] @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 [ossa] @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 [ossa] @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 [ossa] @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 [ossa] @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 [ossa] @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 [ossa] @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 [ossa] @test_rauw_uses_of_project_box : $@convention(thin) (Builtin.Int1, @thin Bool.Type) -> Bool {
bb0(%0 : $Builtin.Int1, %1 : $@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 [ossa] @test_copyvalue_use_of_projectbox : $@convention(thin) (Builtin.Int1) -> () {
// CHECK: bb0([[ARG:%.*]] : $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 [ossa] @test_copyvalue_use_of_projectbox : $@convention(thin) (Builtin.Int1) -> () {
bb0(%0 : $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 : $()
}
