// RUN: %target-swift-frontend %s -emit-silgen -verify sil_stage raw import Builtin import Swift sil @use_int : $@convention(thin) (Int) -> () sil @use_float : $@convention(thin) (Float) -> () sil @yield_2 : $@yield_once_2 (Int, Float) -> (@yields Int, @yields Float) sil @once_signature : $@yield_once () -> (@yields Int, @yields Float) { bb0: %0 = tuple () return %0 : $() } sil @once_2_signature : $@yield_once_2 () -> (@yields Int, @yields Float) { bb0: %0 = tuple () return %0 : $() } sil @many_signature : $@yield_many () -> (@yields Int, @yields Float) { bb0: %0 = tuple () return %0 : $() } sil [ossa] @yield : $@yield_once (Int, Float) -> (@yields Int, @yields Float) { bb0(%0 : $Int, %1 : $Float): yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb2 bb1: %r = tuple () return %r : $() bb2: unwind } sil [ossa] @yield_many : $@yield_many (Int, Float) -> (@yields Int, @yields Float) { bb0(%0 : $Int, %1 : $Float): yield (%0 : $Int, %1 : $Float), resume bb1, unwind bb3 bb1: yield (%0 : $Int, %1 : $Float), resume bb2, unwind bb4 bb2: %r = tuple () return %r : $() bb3: br bb5 bb4: br bb5 bb5: unwind } sil [ossa] @begin_apply : $(Int, Float) -> () { bb0(%0 : $Int, %1 : $Float): %coro = function_ref @yield : $@convention(thin) @yield_once (Int, Float) -> (@yields Int, @yields Float) (%int, %float, %token) = begin_apply %coro(%0, %1) : $@convention(thin) @yield_once (Int, Float) -> (@yields Int, @yields Float) end_apply %token as $() %r = tuple () return %r : $() } sil [ossa] @begin_apply_2 : $(Int, Float) -> () { bb0(%0 : $Int, %1 : $Float): %coro = function_ref @yield_2 : $@convention(thin) @yield_once_2 (Int, Float) -> (@yields Int, @yields Float) (%int, %float, %token, %allocation) = begin_apply %coro(%0, %1) : $@convention(thin) @yield_once_2 (Int, Float) -> (@yields Int, @yields Float) end_apply %token as $() dealloc_stack %allocation : $*Builtin.SILToken %r = tuple () return %r : $() }