// RUN: %target-sil-opt -loadable-address -enable-sil-verify-all %s | %FileCheck %s

// REQUIRES: CPU=x86_64
// REQUIRES: OS=macosx

sil_stage canonical
import Builtin
import Swift

public struct BigStruct {
  var i0 : Int32 = 0
  var i1 : Int32 = 1
  var i2 : Int32 = 2
  var i3 : Int32 = 3
  var i4 : Int32 = 4
  var i5 : Int32 = 5
  var i6 : Int32 = 6
  var i7 : Int32 = 7
  var i8 : Int32 = 8
}

sil @make_big_struct : $@convention(thin) () -> BigStruct
sil @use_big_struct : $@convention(thin) (BigStruct) -> ()

// CHECK-LABEL: sil @test_yield_big : $@yield_once @convention(thin) () -> @yields @in_constant BigStruct {
// CHECK:       bb0:
// CHECK-NEXT:    [[TEMP:%.*]] = alloc_stack $BigStruct
// CHECK-NEXT:    // function_ref
// CHECK-NEXT:    [[MAKE:%.*]] = function_ref @make_big_struct : $@convention(thin) () -> @out BigStruct
// CHECK-NEXT:    apply [[MAKE]]([[TEMP]])
// CHECK-NEXT:    yield [[TEMP]] : $*BigStruct, resume bb1, unwind bb2
// CHECK:       bb1:
// CHECK-NEXT:    [[RET:%.*]] = tuple ()
// CHECK-NEXT:    dealloc_stack [[TEMP]] : $*BigStruct
// CHECK-NEXT:    return [[RET]] : $()
// CHECK:       bb2:
// CHECK-NEXT:    dealloc_stack [[TEMP]] : $*BigStruct
// CHECK-NEXT:    unwind
sil @test_yield_big : $@convention(thin) @yield_once() -> (@yields BigStruct) {
entry:
  %make = function_ref @make_big_struct : $@convention(thin) () -> BigStruct
  %big = apply %make() : $@convention(thin) () -> BigStruct
  yield %big : $BigStruct, resume resume, unwind unwind

resume:
  %ret = tuple ()
  return %ret : $()

unwind:
  unwind
}

// CHECK-LABEL: sil @use_yield_big : $@convention(thin) () -> () {
// CHECK:       bb0:
// CHECK-NEXT:    [[TEMP:%.*]] = alloc_stack $BigStruct
// CHECK-NEXT:    // function_ref
// CHECK-NEXT:    [[CORO:%.*]] = function_ref @test_yield_big : $@yield_once @convention(thin) () -> @yields @in_constant BigStruct
// CHECK-NEXT:    ([[ADDR:%.*]], [[TOKEN:%.*]]) = begin_apply [[CORO]]()
//   TODO: this isn't very efficient
// CHECK-NEXT:    [[T0:%.*]] = load [[ADDR]] : $*BigStruct
// CHECK-NEXT:    store [[T0]] to [[TEMP]] : $*BigStruct
// CHECK-NEXT:    // function_ref
// CHECK-NEXT:    [[USE:%.*]] = function_ref @use_big_struct : $@convention(thin) (@in_constant BigStruct) -> ()
// CHECK-NEXT:    apply [[USE]]([[TEMP]])
// CHECK-NEXT:    end_apply [[TOKEN]]
// CHECK-NEXT:    [[RET:%.*]] = tuple ()
// CHECK-NEXT:    dealloc_stack [[TEMP]] : $*BigStruct
// CHECK-NEXT:    return [[RET]] : $()
sil @use_yield_big : $@convention(thin) () -> () {
entry:
  %yield_big = function_ref @test_yield_big : $@convention(thin) @yield_once() -> (@yields BigStruct)
  (%big, %token) = begin_apply %yield_big() : $@convention(thin) @yield_once() -> (@yields BigStruct)
  %use_big = function_ref @use_big_struct : $@convention(thin) (BigStruct) -> ()
  apply %use_big(%big) : $@convention(thin) (BigStruct) -> ()
  end_apply %token
  %ret = tuple ()
  return %ret : $()
}

sil @yield_fun_ptr2 : $@yield_once @convention(thin) () -> @yields @inout Optional<@callee_guaranteed (@guaranteed BigStruct) -> ()>

// CHECK-LABEL: sil @yield_funptr : $
// CHECK: (%1, %2) = begin_apply %0() : $@yield_once @convention(thin) () -> @yields @inout Optional<@callee_guaranteed (@in_guaranteed BigStruct) -> ()>
// CHECK: yield %1
sil @yield_funptr : $@yield_once @convention(thin) () -> @yields @inout Optional<@callee_guaranteed (@guaranteed BigStruct) -> ()> {
bb0:
  %2 = function_ref @yield_fun_ptr2 : $@yield_once @convention(thin) () -> @yields @inout Optional<@callee_guaranteed (@guaranteed BigStruct) -> ()>
  (%3, %4) = begin_apply %2() : $@yield_once @convention(thin) () -> @yields @inout Optional<@callee_guaranteed (@guaranteed BigStruct) -> ()>
  yield %3 : $*Optional<@callee_guaranteed (@guaranteed BigStruct) -> ()>, resume bb1, unwind bb2

bb1:
  end_apply %4
  %7 = tuple ()
  return %7 : $()

bb2:
  abort_apply %4
  unwind
}
