about summary refs log tree commit diff
path: root/src/test/ui/suggestions
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2017-10-13 23:38:01 +0800
committerGitHub <noreply@github.com>2017-10-13 23:38:01 +0800
commit2a6a4e7045274c129c97d68a0d6651225de9aa42 (patch)
tree27ed82e0519739520facab8ed8c3015e138f87ba /src/test/ui/suggestions
parent9b128e40652cbf369388df07e17eec9dd91f56e7 (diff)
parentfab6a10c00ffda25ed9ec3195b28a9f6a58150a4 (diff)
downloadrust-2a6a4e7045274c129c97d68a0d6651225de9aa42.tar.gz
rust-2a6a4e7045274c129c97d68a0d6651225de9aa42.zip
Rollup merge of #45221 - estebank:issue-41790, r=nikomatsakis
Point at immutable outer variable

When attempting to mutate an immutable outer variable from a closure,
point at the outer variable and suggest making it mutable.

Fix #41790.
Diffstat (limited to 'src/test/ui/suggestions')
-rw-r--r--src/test/ui/suggestions/closure-immutable-outer-variable.rs20
-rw-r--r--src/test/ui/suggestions/closure-immutable-outer-variable.stderr10
2 files changed, 30 insertions, 0 deletions
diff --git a/src/test/ui/suggestions/closure-immutable-outer-variable.rs b/src/test/ui/suggestions/closure-immutable-outer-variable.rs
new file mode 100644
index 00000000000..fe8e2bc6c8e
--- /dev/null
+++ b/src/test/ui/suggestions/closure-immutable-outer-variable.rs
@@ -0,0 +1,20 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// Point at the captured immutable outer variable
+
+fn foo(mut f: Box<FnMut()>) {
+    f();
+}
+
+fn main() {
+    let y = true;
+    foo(Box::new(move || y = false) as Box<_>);
+}
diff --git a/src/test/ui/suggestions/closure-immutable-outer-variable.stderr b/src/test/ui/suggestions/closure-immutable-outer-variable.stderr
new file mode 100644
index 00000000000..19f1cd07171
--- /dev/null
+++ b/src/test/ui/suggestions/closure-immutable-outer-variable.stderr
@@ -0,0 +1,10 @@
+error[E0594]: cannot assign to captured outer variable in an `FnMut` closure
+  --> $DIR/closure-immutable-outer-variable.rs:19:26
+   |
+18 |     let y = true;
+   |         - help: consider making `y` mutable: `mut y`
+19 |     foo(Box::new(move || y = false) as Box<_>);
+   |                          ^^^^^^^^^
+
+error: aborting due to previous error
+