1 #![feature(generators, generator_trait)]
3 use std
::ops
::{Generator, GeneratorState}
;
6 // The following implementation of a function called from a `yield` statement
7 // (apparently requiring the Result and the `String` type or constructor)
8 // creates conditions where the `generator::StateTransform` MIR transform will
9 // drop all `Counter` `Coverage` statements from a MIR. `simplify.rs` has logic
10 // to handle this condition, and still report dead block coverage.
11 fn get_u32(val
: bool
) -> Result
<u32, String
> {
12 if val { Ok(1) }
else { Err(String::from("some error")) }
16 let is_true
= std
::env
::args().len() == 1;
17 let mut generator
= || {
18 yield get_u32(is_true
);
22 match Pin
::new(&mut generator
).resume(()) {
23 GeneratorState
::Yielded(Ok(1)) => {}
24 _
=> panic
!("unexpected return from resume"),
26 match Pin
::new(&mut generator
).resume(()) {
27 GeneratorState
::Complete("foo") => {}
28 _
=> panic
!("unexpected return from resume"),