// RUN: %target-sil-func-extractor %s -func=use_before_init | %FileCheck %s
// RUN: %empty-directory(%t)
// RUN: %target-sil-func-extractor %s -func=use_before_init -emit-sib -o %t/out.sib -module-name main && %target-sil-opt %t/out.sib -module-name main | %FileCheck %s

import Builtin
import Swift

// For now we do not remove dead functions so update this when that functionality is added.

// CHECK-NOT: sil @takes_Int_inout : $@convention(thin) (@inout Int64) -> ()
sil @takes_Int_inout : $@convention(thin) (@inout Int64) -> ()

// CHECK-NOT: sil @makesInt : $@convention(thin) () -> Int64
sil @makesInt : $@convention(thin) () -> Int64

// CHECK-LABEL: sil [serialized] @use_before_init : $@convention(thin) () -> Int64 {
// CHECK: bb0:
// CHECK: return
// CHECK: }
sil [serialized] @use_before_init : $@convention(thin) () -> Int64 {
bb0:
  %1 = alloc_box $<τ_0_0> { var τ_0_0 } <Int64>
  %1a = project_box %1 : $<τ_0_0> { var τ_0_0 } <Int64>, 0
  %2 = load %1a : $*Int64
  %3 = function_ref @inout_uninit : $@convention(thin)() -> ()
  apply %3() : $@convention(thin) () -> ()
  strong_release %1 : $<τ_0_0> { var τ_0_0 } <Int64>
  return %2 : $Int64
}

// CHECK-NOT: sil @inout_uninit : $@convention(thin) () -> () {
sil @inout_uninit : $@convention(thin) () -> () {
bb0:
  %1 = alloc_box $<τ_0_0> { var τ_0_0 } <Int64>
  %1a = project_box %1 : $<τ_0_0> { var τ_0_0 } <Int64>, 0
  %5 = function_ref @takes_Int_inout : $@convention(thin) (@inout Int64) -> ()
  %6 = apply %5(%1a) : $@convention(thin) (@inout Int64) -> ()

  %0 = tuple ()
  strong_release %1 : $<τ_0_0> { var τ_0_0 } <Int64>
  return %0 : $()
}
