about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-04-29 12:59:39 -0700
committerbors <bors@rust-lang.org>2016-04-29 12:59:39 -0700
commit9b63263d0d2ee265765ba7f802d2b23fe5d413f5 (patch)
treeb0a9b16e7288d1139b37d4531d873e42bbaf2125
parent8b1dcf40f2a2e9e13fc9cb9fe2200841c6fa40f3 (diff)
parent0cfb5a0bb6f48dcb68d3bf61c4b04db771deb4ce (diff)
downloadrust-9b63263d0d2ee265765ba7f802d2b23fe5d413f5.tar.gz
rust-9b63263d0d2ee265765ba7f802d2b23fe5d413f5.zip
Auto merge of #33229 - timothy-mcroy:master, r=guillaumegomez
Explain E0434
-rw-r--r--src/librustc_resolve/diagnostics.rs46
1 files changed, 45 insertions, 1 deletions
diff --git a/src/librustc_resolve/diagnostics.rs b/src/librustc_resolve/diagnostics.rs
index 8a196768ae5..0a8fce49ebb 100644
--- a/src/librustc_resolve/diagnostics.rs
+++ b/src/librustc_resolve/diagnostics.rs
@@ -948,6 +948,51 @@ use something_which_doesnt_exist;
 Please verify you didn't misspell the import's name.
 "##,
 
+E0434: r##"
+This error indicates that a variable usage inside an inner function is invalid
+because the variable comes from a dynamic environment. Inner functions do not
+have access to their containing environment.
+
+Example of erroneous code:
+
+```compile_fail
+fn foo() {
+    let y = 5;
+    fn bar() -> u32 {
+        y // error: can't capture dynamic environment in a fn item; use the
+          //        || { ... } closure form instead.
+    }
+}
+```
+
+Functions do not capture local variables. To fix this error, you can replace the
+function with a closure:
+
+```
+fn foo() {
+    let y = 5;
+    let bar = || {
+        y
+    };
+}
+```
+
+or replace the captured variable with a constant or a static item:
+
+```
+fn foo() {
+    static mut X: u32 = 4;
+    const Y: u32 = 5;
+    fn bar() -> u32 {
+        unsafe {
+            X = 3;
+        }
+        Y
+    }
+}
+```
+"##,
+
 E0435: r##"
 A non-constant value was used to initialise a constant. Example of erroneous
 code:
@@ -1044,5 +1089,4 @@ register_diagnostics! {
     E0421, // unresolved associated const
     E0427, // cannot use `ref` binding mode with ...
     E0429, // `self` imports are only allowed within a { } list
-    E0434, // can't capture dynamic environment in a fn item
 }