//@ run-pass #![feature(coroutines, coroutine_trait, stmt_expr_attributes)] use std::ops::{Coroutine, CoroutineState}; use std::pin::Pin; fn main() { let mut coroutine = #[coroutine] static || { let a = true; let b = &a; yield; assert_eq!(b as *const _, &a as *const _); }; // SAFETY: We shadow the original coroutine variable so have no safe API to // move it after this point. let mut coroutine = unsafe { Pin::new_unchecked(&mut coroutine) }; assert_eq!(coroutine.as_mut().resume(()), CoroutineState::Yielded(())); assert_eq!(coroutine.as_mut().resume(()), CoroutineState::Complete(())); }