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