mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
* Allow normal function results of @yield_once coroutines * Address review comments * Workaround LLVM coroutine codegen problem: it assumes that unwind path never returns. This is not true to Swift coroutines as unwind path should end with error result.
64 lines
1.3 KiB
Plaintext
64 lines
1.3 KiB
Plaintext
// RUN: %target-swift-frontend %s -emit-silgen -verify
|
|
|
|
sil_stage raw
|
|
|
|
import Swift
|
|
|
|
sil @use_int : $@convention(thin) (Int) -> ()
|
|
sil @use_float : $@convention(thin) (Float) -> ()
|
|
|
|
sil @once_signature : $@yield_once () -> (@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 : $()
|
|
}
|