#![feature(coroutines)] // Test for issue #47189. Here, both `s` and `t` are live for the // coroutine's lifetime, but within the coroutine they have distinct // lifetimes. We accept this code -- even though the borrow extends // over a yield -- because the data that is borrowed (`*x`) is not // stored on the stack. //@ check-pass fn foo(x: &mut u32) { #[coroutine] move || { let s = &mut *x; yield; *s += 1; let t = &mut *x; yield; *t += 1; }; } fn main() { foo(&mut 0); }