summaryrefslogtreecommitdiffstats
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 000000000..4c18077f3
--- /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());
+}