1 //@compile-flags: -Zmiri-disable-validation
2 #![feature(generators, generator_trait)]
5 ops::{Generator, GeneratorState},
9 fn firstn() -> impl Generator<Yield = u64, Return = ()> {
15 *num += 1; //~ ERROR: dereferenced after this allocation got freed
19 struct GeneratorIteratorAdapter<G>(G);
21 impl<G> Iterator for GeneratorIteratorAdapter<G>
23 G: Generator<Return = ()>,
27 fn next(&mut self) -> Option<Self::Item> {
28 let me = unsafe { Pin::new_unchecked(&mut self.0) };
30 GeneratorState::Yielded(x) => Some(x),
31 GeneratorState::Complete(_) => None,
37 let mut generator_iterator_2 = {
38 let mut generator_iterator = Box::new(GeneratorIteratorAdapter(firstn()));
39 generator_iterator.next(); // pin it
41 Box::new(*generator_iterator) // move it
42 }; // *deallocate* generator_iterator
44 generator_iterator_2.next(); // and use moved value