about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2019-12-11 23:04:29 +0900
committerYuki Okushi <huyuumi.dev@gmail.com>2019-12-12 11:13:13 +0900
commitfa199c5f27cf09fa02ff7632a713ea613f731944 (patch)
treec149b12b4369fec714d85fcf026475b30460f0d5 /src/test
parent27d6f55f47e8875e71083a28ed84ea5a88e1b596 (diff)
downloadrust-fa199c5f27cf09fa02ff7632a713ea613f731944.tar.gz
rust-fa199c5f27cf09fa02ff7632a713ea613f731944.zip
Don't suggest wrong snippet in closure
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/suggestions/option-content-move2.rs16
-rw-r--r--src/test/ui/suggestions/option-content-move2.stderr18
2 files changed, 34 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/option-content-move2.rs b/src/test/ui/suggestions/option-content-move2.rs
new file mode 100644
index 00000000000..88e8a5b7aee
--- /dev/null
+++ b/src/test/ui/suggestions/option-content-move2.rs
@@ -0,0 +1,16 @@
+struct NotCopyable;
+
+fn func<F: FnMut() -> H, H: FnMut()>(_: F) {}
+
+fn parse() {
+    let mut var = None;
+    func(|| {
+        // Shouldn't suggest `move ||.as_ref()` here
+        move || {
+        //~^ ERROR: cannot move out of `var`
+            var = Some(NotCopyable);
+        }
+    });
+}
+
+fn main() {}
diff --git a/src/test/ui/suggestions/option-content-move2.stderr b/src/test/ui/suggestions/option-content-move2.stderr
new file mode 100644
index 00000000000..71f745374e5
--- /dev/null
+++ b/src/test/ui/suggestions/option-content-move2.stderr
@@ -0,0 +1,18 @@
+error[E0507]: cannot move out of `var`, a captured variable in an `FnMut` closure
+  --> $DIR/option-content-move2.rs:9:9
+   |
+LL |     let mut var = None;
+   |         ------- captured outer variable
+...
+LL |         move || {
+   |         ^^^^^^^ move out of `var` occurs here
+LL |
+LL |             var = Some(NotCopyable);
+   |             ---
+   |             |
+   |             move occurs because `var` has type `std::option::Option<NotCopyable>`, which does not implement the `Copy` trait
+   |             move occurs due to use in closure
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0507`.