| //@ 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(())); | |
| } |