// Copied from https://github.com/rust-lang/rust/blob/46455dc65069387f2dc46612f13fd45452ab301a/tests/ui/coroutine/gen_block_iterate.rs // revisions: next old //compile-flags: --edition 2024 -Zunstable-options //[next] compile-flags: -Ztrait-solver=next // run-pass #![feature(gen_blocks)] fn foo() -> impl Iterator { gen { yield 42; for x in 3..6 { yield x } } } fn moved() -> impl Iterator { let mut x = "foo".to_string(); gen move { yield 42; if x == "foo" { return } x.clear(); for x in 3..6 { yield x } } } fn main() { let mut iter = foo(); assert_eq!(iter.next(), Some(42)); assert_eq!(iter.next(), Some(3)); assert_eq!(iter.next(), Some(4)); assert_eq!(iter.next(), Some(5)); assert_eq!(iter.next(), None); // `gen` blocks are fused assert_eq!(iter.next(), None); let mut iter = moved(); assert_eq!(iter.next(), Some(42)); assert_eq!(iter.next(), None); }