summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_error_codes/src/error_codes/E0434.md
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_error_codes/src/error_codes/E0434.md')
-rw-r--r--compiler/rustc_error_codes/src/error_codes/E0434.md40
1 files changed, 40 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0434.md b/compiler/rustc_error_codes/src/error_codes/E0434.md
new file mode 100644
index 000000000..8fd60412b
--- /dev/null
+++ b/compiler/rustc_error_codes/src/error_codes/E0434.md
@@ -0,0 +1,40 @@
+A variable used inside an inner function comes from a dynamic environment.
+
+Erroneous code example:
+
+```compile_fail,E0434
+fn foo() {
+ let y = 5;
+ fn bar() -> u32 {
+ y // error: can't capture dynamic environment in a fn item; use the
+ // || { ... } closure form instead.
+ }
+}
+```
+
+Inner functions do not have access to their containing environment. 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
+ }
+}
+```