about summary refs log tree commit diff
path: root/tests/ui/generator/dropck-resume.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/generator/dropck-resume.rs')
-rw-r--r--tests/ui/generator/dropck-resume.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/ui/generator/dropck-resume.rs b/tests/ui/generator/dropck-resume.rs
new file mode 100644
index 00000000000..4c18077f335
--- /dev/null
+++ b/tests/ui/generator/dropck-resume.rs
@@ -0,0 +1,33 @@
+#![feature(generators, generator_trait)]
+
+use std::ops::{Generator, GeneratorState};
+use std::pin::Pin;
+
+struct SetToNone<'a: 'b, 'b>(&'b mut Option<&'a i32>);
+
+impl<'a, 'b> Drop for SetToNone<'a, 'b> {
+    fn drop(&mut self) {
+        *self.0 = None;
+    }
+}
+
+fn drop_using_generator() -> i32 {
+    let mut y = Some(&0);
+    let z = &mut y;
+    let r;
+    {
+        let mut g = move |r| {
+            let _s = SetToNone(r);
+            yield;
+        };
+        let mut g = Pin::new(&mut g);
+        g.as_mut().resume(z);
+        r = y.as_ref().unwrap();
+        //~^ ERROR cannot borrow `y` as immutable because it is also borrowed as mutable
+    }
+    **r
+}
+
+fn main() {
+    println!("{}", drop_using_generator());
+}