about summary refs log tree commit diff
diff options
context:
space:
mode:
author1000teslas <47207223+1000teslas@users.noreply.github.com>2021-01-03 03:53:50 +1100
committer1000teslas <47207223+1000teslas@users.noreply.github.com>2021-01-10 16:47:40 +1100
commit12f17957432fa03a8fe57c2b6063c662add45c2c (patch)
tree53bccbddf0bf870e020d6bd94df31bbafb96405b
parent5ccef564560df65db0cb761cb27751f15821f1af (diff)
downloadrust-12f17957432fa03a8fe57c2b6063c662add45c2c.tar.gz
rust-12f17957432fa03a8fe57c2b6063c662add45c2c.zip
Fix location of error message explanation
-rw-r--r--compiler/rustc_mir/src/borrow_check/diagnostics/conflict_errors.rs22
-rw-r--r--src/test/ui/async-await/issues/issue-78938-async-block.rs6
-rw-r--r--src/test/ui/async-await/issues/issue-78938-async-block.stderr4
3 files changed, 17 insertions, 15 deletions
diff --git a/compiler/rustc_mir/src/borrow_check/diagnostics/conflict_errors.rs b/compiler/rustc_mir/src/borrow_check/diagnostics/conflict_errors.rs
index 1dd102f4f34..43e9701aa25 100644
--- a/compiler/rustc_mir/src/borrow_check/diagnostics/conflict_errors.rs
+++ b/compiler/rustc_mir/src/borrow_check/diagnostics/conflict_errors.rs
@@ -1323,16 +1323,6 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
             suggestion,
             Applicability::MachineApplicable,
         );
-        if let Some(generator_kind) = use_span.generator_kind() {
-            if let GeneratorKind::Async(_) = generator_kind {
-                err.note(
-            "borrows cannot be held across a yield point, because the stack space of the current \
-            function is not preserved",
-        );
-                err.help("see https://rust-lang.github.io/async-book/03_async_await/01_chapter.html#awaiting-on-a-multithreaded-executor \
-        for more information");
-            }
-        }
 
         let msg = match category {
             ConstraintCategory::Return(_) | ConstraintCategory::OpaqueType => {
@@ -1349,6 +1339,18 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
             ),
         };
         err.span_note(constraint_span, &msg);
+        if let ConstraintCategory::CallArgument = category {
+            if let Some(generator_kind) = use_span.generator_kind() {
+                if let GeneratorKind::Async(_) = generator_kind {
+                    err.note(
+                        "borrows cannot be held across a yield point, because the stack \
+                        space of the current function is not preserved",
+                    );
+                    err.help("see https://rust-lang.github.io/async-book/03_async_await/01_chapter.html#awaiting-on-a-multithreaded-executor \
+                        for more information");
+                }
+            }
+        }
         err
     }
 
diff --git a/src/test/ui/async-await/issues/issue-78938-async-block.rs b/src/test/ui/async-await/issues/issue-78938-async-block.rs
index e3d8eb73772..a16061fd979 100644
--- a/src/test/ui/async-await/issues/issue-78938-async-block.rs
+++ b/src/test/ui/async-await/issues/issue-78938-async-block.rs
@@ -16,7 +16,7 @@ fn game_loop(v: Arc<Vec<usize>>) {}
 fn spawn<F>(future: F) -> JoinHandle
 where
     F: Future + Send + 'static,
-    F::Output: Send + 'static,  
+    F::Output: Send + 'static,
 {
     loop {}
 }
@@ -26,8 +26,8 @@ struct JoinHandle;
 impl Future for JoinHandle {
     type Output = ();
     fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
-        loop {}
+       loop {}
     }
 }
 
-fn main() {}
\ No newline at end of file
+fn main() {}
diff --git a/src/test/ui/async-await/issues/issue-78938-async-block.stderr b/src/test/ui/async-await/issues/issue-78938-async-block.stderr
index 83cf1a5bc46..604c47b430f 100644
--- a/src/test/ui/async-await/issues/issue-78938-async-block.stderr
+++ b/src/test/ui/async-await/issues/issue-78938-async-block.stderr
@@ -8,8 +8,6 @@ LL | |         game_loop(Arc::clone(&room_ref))
 LL | |     });
    | |_____^ may outlive borrowed value `room_ref`
    |
-   = note: borrows cannot be held across a yield point, because the stack space of the current function is not preserved
-   = help: see https://rust-lang.github.io/async-book/03_async_await/01_chapter.html#awaiting-on-a-multithreaded-executor for more information
 note: function requires argument type to outlive `'static`
   --> $DIR/issue-78938-async-block.rs:8:33
    |
@@ -18,6 +16,8 @@ LL |       let gameloop_handle = spawn(async {
 LL | |         game_loop(Arc::clone(&room_ref))
 LL | |     });
    | |_____^
+   = note: borrows cannot be held across a yield point, because the stack space of the current function is not preserved
+   = help: see https://rust-lang.github.io/async-book/03_async_await/01_chapter.html#awaiting-on-a-multithreaded-executor for more information
 help: to force the async block to take ownership of `room_ref` (and any other referenced variables), use the `move` keyword
    |
 LL |     let gameloop_handle = spawn(async move {