| // revisions: no_drop_tracking drop_tracking drop_tracking_mir |
| // [drop_tracking] compile-flags: -Zdrop-tracking |
| // [drop_tracking_mir] compile-flags: -Zdrop-tracking-mir |
| |
| //! This test ensures that a mutable reference cannot be passed as a resume argument twice. |
| |
| #![feature(generators, generator_trait)] |
| |
| use std::marker::Unpin; |
| use std::ops::{ |
| Generator, |
| GeneratorState::{self, *}, |
| }; |
| use std::pin::Pin; |
| |
| fn main() { |
| let mut thing = String::from("hello"); |
| |
| let mut gen = |r| { |
| if false { |
| yield r; |
| } |
| }; |
| |
| let mut gen = Pin::new(&mut gen); |
| gen.as_mut().resume(&mut thing); |
| gen.as_mut().resume(&mut thing); |
| //~^ cannot borrow `thing` as mutable more than once at a time |
| } |