about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-12-24 04:39:58 +0100
committerGitHub <noreply@github.com>2019-12-24 04:39:58 +0100
commita75968a7829bf140d66f896084c2dfbdcc79cd30 (patch)
tree1f8fb252c00a5df968c21cbbe62a79befdfe11df
parentd130e8d550909413299bc9ac11490f98cb55340a (diff)
parent587d03bea89b2b551633aa561073ba97409a5dac (diff)
downloadrust-a75968a7829bf140d66f896084c2dfbdcc79cd30.tar.gz
rust-a75968a7829bf140d66f896084c2dfbdcc79cd30.zip
Rollup merge of #67551 - ldm0:E0627, r=Dylan-DPC
Add long error code explanation message for E0627

Part of #61137.

r? @GuillaumeGomez
-rw-r--r--src/librustc_error_codes/error_codes.rs2
-rw-r--r--src/librustc_error_codes/error_codes/E0627.md30
-rw-r--r--src/librustc_mir/borrow_check/mod.rs2
-rw-r--r--src/librustc_mir/borrow_check/path_utils.rs2
-rw-r--r--src/librustc_typeck/check/expr.rs2
-rw-r--r--src/test/ui/feature-gates/feature-gate-generators.rs2
-rw-r--r--src/test/ui/feature-gates/feature-gate-generators.stderr5
-rw-r--r--src/test/ui/generator/yield-in-const.rs2
-rw-r--r--src/test/ui/generator/yield-in-const.stderr3
-rw-r--r--src/test/ui/generator/yield-in-function.rs2
-rw-r--r--src/test/ui/generator/yield-in-function.stderr3
-rw-r--r--src/test/ui/generator/yield-in-static.rs2
-rw-r--r--src/test/ui/generator/yield-in-static.stderr3
13 files changed, 47 insertions, 13 deletions
diff --git a/src/librustc_error_codes/error_codes.rs b/src/librustc_error_codes/error_codes.rs
index 9c1bec39b29..fbcc976bd49 100644
--- a/src/librustc_error_codes/error_codes.rs
+++ b/src/librustc_error_codes/error_codes.rs
@@ -346,6 +346,7 @@ E0622: include_str!("./error_codes/E0622.md"),
 E0623: include_str!("./error_codes/E0623.md"),
 E0624: include_str!("./error_codes/E0624.md"),
 E0626: include_str!("./error_codes/E0626.md"),
+E0627: include_str!("./error_codes/E0627.md"),
 E0631: include_str!("./error_codes/E0631.md"),
 E0633: include_str!("./error_codes/E0633.md"),
 E0635: include_str!("./error_codes/E0635.md"),
@@ -574,7 +575,6 @@ E0745: include_str!("./error_codes/E0745.md"),
 //  E0612, // merged into E0609
 //  E0613, // Removed (merged with E0609)
     E0625, // thread-local statics cannot be accessed at compile-time
-    E0627, // yield statement outside of generator literal
     E0628, // generators cannot have explicit parameters
     E0629, // missing 'feature' (rustc_const_unstable)
     // rustc_const_unstable attribute must be paired with stable/unstable
diff --git a/src/librustc_error_codes/error_codes/E0627.md b/src/librustc_error_codes/error_codes/E0627.md
new file mode 100644
index 00000000000..21358e1e567
--- /dev/null
+++ b/src/librustc_error_codes/error_codes/E0627.md
@@ -0,0 +1,30 @@
+A yield expression was used outside of the generator literal.
+
+Erroneous code example:
+
+```compile_fail,E0627
+#![feature(generators, generator_trait)]
+
+fn fake_generator() -> &'static str {
+    yield 1;
+    return "foo"
+}
+
+fn main() {
+    let mut generator = fake_generator;
+}
+```
+
+The error occurs because keyword `yield` can only be used inside the generator
+literal. This can be fixed by constructing the generator correctly.
+
+```
+#![feature(generators, generator_trait)]
+
+fn main() {
+    let mut generator = || {
+        yield 1;
+        return "foo"
+    };
+}
+```
diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs
index 4a6379e3bc1..0d136bd7d9c 100644
--- a/src/librustc_mir/borrow_check/mod.rs
+++ b/src/librustc_mir/borrow_check/mod.rs
@@ -1424,7 +1424,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
     }
 
     /// Reports an error if this is a borrow of local data.
-    /// This is called for all Yield statements on movable generators
+    /// This is called for all Yield expressions on movable generators
     fn check_for_local_borrow(&mut self, borrow: &BorrowData<'tcx>, yield_span: Span) {
         debug!("check_for_local_borrow({:?})", borrow);
 
diff --git a/src/librustc_mir/borrow_check/path_utils.rs b/src/librustc_mir/borrow_check/path_utils.rs
index ea541bd93bc..23b4799643a 100644
--- a/src/librustc_mir/borrow_check/path_utils.rs
+++ b/src/librustc_mir/borrow_check/path_utils.rs
@@ -131,7 +131,7 @@ pub(super) fn is_active<'tcx>(
 }
 
 /// Determines if a given borrow is borrowing local data
-/// This is called for all Yield statements on movable generators
+/// This is called for all Yield expressions on movable generators
 pub(super) fn borrow_of_local_data(place: &Place<'_>) -> bool {
     match place.base {
         PlaceBase::Static(_) => false,
diff --git a/src/librustc_typeck/check/expr.rs b/src/librustc_typeck/check/expr.rs
index 5c602ad76cd..e862971c9e2 100644
--- a/src/librustc_typeck/check/expr.rs
+++ b/src/librustc_typeck/check/expr.rs
@@ -1810,7 +1810,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
                     self.tcx.sess,
                     expr.span,
                     E0627,
-                    "yield statement outside of generator literal"
+                    "yield expression outside of generator literal"
                 )
                 .emit();
             }
diff --git a/src/test/ui/feature-gates/feature-gate-generators.rs b/src/test/ui/feature-gates/feature-gate-generators.rs
index 382d891feed..931fee13471 100644
--- a/src/test/ui/feature-gates/feature-gate-generators.rs
+++ b/src/test/ui/feature-gates/feature-gate-generators.rs
@@ -1,6 +1,6 @@
 fn main() {
     yield true; //~ ERROR yield syntax is experimental
-                //~^ ERROR yield statement outside of generator literal
+                //~^ ERROR yield expression outside of generator literal
 }
 
 #[cfg(FALSE)]
diff --git a/src/test/ui/feature-gates/feature-gate-generators.stderr b/src/test/ui/feature-gates/feature-gate-generators.stderr
index 24b814b410c..4adc21efc6a 100644
--- a/src/test/ui/feature-gates/feature-gate-generators.stderr
+++ b/src/test/ui/feature-gates/feature-gate-generators.stderr
@@ -25,7 +25,7 @@ LL |     yield 0;
    = note: for more information, see https://github.com/rust-lang/rust/issues/43122
    = help: add `#![feature(generators)]` to the crate attributes to enable
 
-error[E0627]: yield statement outside of generator literal
+error[E0627]: yield expression outside of generator literal
   --> $DIR/feature-gate-generators.rs:2:5
    |
 LL |     yield true;
@@ -33,4 +33,5 @@ LL |     yield true;
 
 error: aborting due to 4 previous errors
 
-For more information about this error, try `rustc --explain E0658`.
+Some errors have detailed explanations: E0627, E0658.
+For more information about an error, try `rustc --explain E0627`.
diff --git a/src/test/ui/generator/yield-in-const.rs b/src/test/ui/generator/yield-in-const.rs
index f6f11b9cb13..fe5ca822cec 100644
--- a/src/test/ui/generator/yield-in-const.rs
+++ b/src/test/ui/generator/yield-in-const.rs
@@ -1,6 +1,6 @@
 #![feature(generators)]
 
 const A: u8 = { yield 3u8; 3u8};
-//~^ ERROR yield statement outside
+//~^ ERROR yield expression outside
 
 fn main() {}
diff --git a/src/test/ui/generator/yield-in-const.stderr b/src/test/ui/generator/yield-in-const.stderr
index 663bb70d7a0..dcf4fe63e64 100644
--- a/src/test/ui/generator/yield-in-const.stderr
+++ b/src/test/ui/generator/yield-in-const.stderr
@@ -1,4 +1,4 @@
-error[E0627]: yield statement outside of generator literal
+error[E0627]: yield expression outside of generator literal
   --> $DIR/yield-in-const.rs:3:17
    |
 LL | const A: u8 = { yield 3u8; 3u8};
@@ -6,3 +6,4 @@ LL | const A: u8 = { yield 3u8; 3u8};
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0627`.
diff --git a/src/test/ui/generator/yield-in-function.rs b/src/test/ui/generator/yield-in-function.rs
index b737d3b2240..29b811621de 100644
--- a/src/test/ui/generator/yield-in-function.rs
+++ b/src/test/ui/generator/yield-in-function.rs
@@ -1,4 +1,4 @@
 #![feature(generators)]
 
 fn main() { yield; }
-//~^ ERROR yield statement outside
+//~^ ERROR yield expression outside
diff --git a/src/test/ui/generator/yield-in-function.stderr b/src/test/ui/generator/yield-in-function.stderr
index e12b0e6843e..51cce198ca3 100644
--- a/src/test/ui/generator/yield-in-function.stderr
+++ b/src/test/ui/generator/yield-in-function.stderr
@@ -1,4 +1,4 @@
-error[E0627]: yield statement outside of generator literal
+error[E0627]: yield expression outside of generator literal
   --> $DIR/yield-in-function.rs:3:13
    |
 LL | fn main() { yield; }
@@ -6,3 +6,4 @@ LL | fn main() { yield; }
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0627`.
diff --git a/src/test/ui/generator/yield-in-static.rs b/src/test/ui/generator/yield-in-static.rs
index 12c9ccea4cb..d27fbb33ba1 100644
--- a/src/test/ui/generator/yield-in-static.rs
+++ b/src/test/ui/generator/yield-in-static.rs
@@ -1,6 +1,6 @@
 #![feature(generators)]
 
 static B: u8 = { yield 3u8; 3u8};
-//~^ ERROR yield statement outside
+//~^ ERROR yield expression outside
 
 fn main() {}
diff --git a/src/test/ui/generator/yield-in-static.stderr b/src/test/ui/generator/yield-in-static.stderr
index 220520c3862..d867f3ad345 100644
--- a/src/test/ui/generator/yield-in-static.stderr
+++ b/src/test/ui/generator/yield-in-static.stderr
@@ -1,4 +1,4 @@
-error[E0627]: yield statement outside of generator literal
+error[E0627]: yield expression outside of generator literal
   --> $DIR/yield-in-static.rs:3:18
    |
 LL | static B: u8 = { yield 3u8; 3u8};
@@ -6,3 +6,4 @@ LL | static B: u8 = { yield 3u8; 3u8};
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0627`.