about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authororibenshir <oribenshir@gmail.com>2022-03-05 12:04:32 +0200
committeroribenshir <oribenshir@gmail.com>2022-04-16 14:09:40 +0300
commitebe3c56c6eeca6db4a62ebb99e2ffe35f33ea4de (patch)
treedfca2323c2625eafa1cc55e08b4b638970de835a /src
parent07bb916d44a66d2caba427c7ee132bbeb245977b (diff)
downloadrust-ebe3c56c6eeca6db4a62ebb99e2ffe35f33ea4de.tar.gz
rust-ebe3c56c6eeca6db4a62ebb99e2ffe35f33ea4de.zip
Provide a better diagnostic on failure to meet send bound on futures in a foreign crate
Adding diagnostic data on generators to the crate metadata and using it to provide
a better diagnostic on failure to meet send bound on futures originated from a foreign crate
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/async-await/issues/issue-67893.rs2
-rw-r--r--src/test/ui/async-await/issues/issue-67893.stderr16
2 files changed, 15 insertions, 3 deletions
diff --git a/src/test/ui/async-await/issues/issue-67893.rs b/src/test/ui/async-await/issues/issue-67893.rs
index 8b53408d758..d73772e5fa0 100644
--- a/src/test/ui/async-await/issues/issue-67893.rs
+++ b/src/test/ui/async-await/issues/issue-67893.rs
@@ -7,5 +7,5 @@ fn g(_: impl Send) {}
 
 fn main() {
     g(issue_67893::run())
-    //~^ ERROR generator cannot be sent between threads safely
+    //~^ ERROR future cannot be sent between threads safely
 }
diff --git a/src/test/ui/async-await/issues/issue-67893.stderr b/src/test/ui/async-await/issues/issue-67893.stderr
index 0aa0d5d7ccd..316b6d06f93 100644
--- a/src/test/ui/async-await/issues/issue-67893.stderr
+++ b/src/test/ui/async-await/issues/issue-67893.stderr
@@ -1,10 +1,22 @@
-error: generator cannot be sent between threads safely
+error: future cannot be sent between threads safely
   --> $DIR/issue-67893.rs:9:7
    |
 LL |     g(issue_67893::run())
-   |       ^^^^^^^^^^^^^^^^^^ generator is not `Send`
+   |       ^^^^^^^^^^^^^^^^^^ future is not `Send`
    |
    = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `MutexGuard<'_, ()>`
+note: future is not `Send` as this value is used across an await
+  --> $DIR/auxiliary/issue_67893.rs:9:26
+   |
+LL |     f(*x.lock().unwrap()).await;
+   |        ----------------- ^^^^^^ await occurs here, with `x.lock().unwrap()` maybe used later
+   |        |
+   |        has type `MutexGuard<'_, ()>` which is not `Send`
+note: `x.lock().unwrap()` is later dropped here
+  --> $DIR/auxiliary/issue_67893.rs:9:32
+   |
+LL |     f(*x.lock().unwrap()).await;
+   |                                ^
 note: required by a bound in `g`
   --> $DIR/issue-67893.rs:6:14
    |