@@ -32,6 +32,7 @@ sil @unknown_func : $@convention(thin) (Int32, @in_guaranteed Int32) -> ()
3232sil @single_indirect_arg : $@convention(thin) (@in_guaranteed Int32) -> Int32
3333sil @single_indirect_arg_and_error : $@convention(thin) (@in Int32) -> (Int32, @error Error)
3434sil @single_indirect_arg_coroutine : $@yield_once @convention(thin) (@in Int32) -> @yields Int32
35+ sil [readnone] @read_none_coroutine : $@yield_once @convention(thin) () -> @yields @inout Int32
3536sil @indirect_arg_and_ptr : $@convention(thin) (@in_guaranteed Int32, Builtin.RawPointer) -> Int32
3637sil @single_reference : $@convention(thin) (@guaranteed X) -> Int32
3738sil @indirect_yield_coroutine : $@yield_once @convention(thin) (@inout Int32) -> @yields @inout Int32
@@ -407,6 +408,41 @@ bb0(%0 : $Int32):
407408 return %9 : $()
408409}
409410
411+ // CHECK-LABEL: @read_none_end_apply
412+ // CHECK: PAIR #0.
413+ // CHECK-NEXT: (%2, %3) = begin_apply %1() : $@yield_once @convention(thin) () -> @yields @inout Int32 // users: %8, %5
414+ // CHECK-NEXT: %0 = argument of bb0 : $*Int32
415+ // CHECK-NEXT: r=0,w=0
416+ // CHECK: PAIR #1.
417+ // CHECK-NEXT: %5 = end_apply %3 as $()
418+ // CHECK-NEXT: %0 = argument of bb0 : $*Int32
419+ // CHECK-NEXT: r=0,w=0
420+ // CHECK: PAIR #2.
421+ // CHECK-NEXT: %5 = end_apply %3 as $()
422+ // CHECK-NEXT: (**%2**, %3) = begin_apply %1() : $@yield_once @convention(thin) () -> @yields @inout Int32
423+ // CHECK-NEXT: r=1,w=1
424+ // CHECK: PAIR #3.
425+ // CHECK-NEXT: abort_apply %3
426+ // CHECK-NEXT: %0 = argument of bb0 : $*Int32
427+ // CHECK-NEXT: r=0,w=0
428+ // CHECK: PAIR #4.
429+ // CHECK-NEXT: abort_apply %3
430+ // CHECK-NEXT: (**%2**, %3) = begin_apply %1() : $@yield_once @convention(thin) () -> @yields @inout Int32
431+ // CHECK-NEXT: r=1,w=1
432+ sil [ossa] @read_none_end_apply : $@convention(thin) (@in Int32) -> () {
433+ bb0(%0 : $*Int32):
434+ %3 = function_ref @read_none_coroutine : $@yield_once @convention(thin) () -> @yields @inout Int32
435+ (%4, %5) = begin_apply %3() : $@yield_once @convention(thin) () -> @yields @inout Int32
436+ cond_br undef, bb1, bb2
437+ bb1:
438+ end_apply %5 as $()
439+ %r = tuple ()
440+ return %r
441+ bb2:
442+ abort_apply %5
443+ unreachable
444+ }
445+
410446// CHECK-LABEL: @refelementaddr_and_reference
411447// CHECK: PAIR #0.
412448// CHECK-NEXT: %3 = apply %2(%0) : $@convention(thin) (@guaranteed X) -> Int32
0 commit comments