about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2019-10-09 01:59:14 +0900
committerYuki Okushi <huyuumi.dev@gmail.com>2019-10-11 08:23:33 +0900
commite0ef7767cab847f73e145d3f2eb99aef02c94067 (patch)
treeb84918ae1ff0b243b64609295957c7384adc85f4
parent321ccbe1dbc655faeb20bf78c5463ebb12640d78 (diff)
downloadrust-e0ef7767cab847f73e145d3f2eb99aef02c94067.tar.gz
rust-e0ef7767cab847f73e145d3f2eb99aef02c94067.zip
Add long error explanation for E0697
-rw-r--r--src/librustc/error_codes.rs19
-rw-r--r--src/test/ui/static/static-closures.stderr1
2 files changed, 19 insertions, 1 deletions
diff --git a/src/librustc/error_codes.rs b/src/librustc/error_codes.rs
index e208e25f6ea..a4c1afc4f1d 100644
--- a/src/librustc/error_codes.rs
+++ b/src/librustc/error_codes.rs
@@ -2001,6 +2001,24 @@ a (non-transparent) struct containing a single float, while `Grams` is a
 transparent wrapper around a float. This can make a difference for the ABI.
 "##,
 
+E0697: r##"
+A closure has been used as `static`.
+
+Erroneous code example:
+
+```compile_fail,E0697
+fn main() {
+    static || {}; // used as `static`
+}
+```
+
+Closures cannot be used as `static`. They "save" the environment.
+Therefore, having a static closure with a static environment doesn't
+really make sense since all you can capture inside it would be variables
+with static lifetime. In this condition, better use a function directly.
+The easiest fix is to remove `static` keyword.
+"##,
+
 E0698: r##"
 When using generators (or async) all type variables must be bound so a
 generator can be constructed.
@@ -2187,7 +2205,6 @@ See [RFC 2091] for details on this and other limitations.
     E0657, // `impl Trait` can only capture lifetimes bound at the fn level
     E0687, // in-band lifetimes cannot be used in `fn`/`Fn` syntax
     E0688, // in-band lifetimes cannot be mixed with explicit lifetime binders
-    E0697, // closures cannot be static
 //  E0707, // multiple elided lifetimes used in arguments of `async fn`
     E0708, // `async` non-`move` closures with parameters are not currently
            // supported
diff --git a/src/test/ui/static/static-closures.stderr b/src/test/ui/static/static-closures.stderr
index ced78c03e09..99235e26e15 100644
--- a/src/test/ui/static/static-closures.stderr
+++ b/src/test/ui/static/static-closures.stderr
@@ -6,3 +6,4 @@ LL |     static || {};
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0697`.