Update async-await-let-else for drop tracking
This commit is contained in:
parent
c84083b08e
commit
9bcc107ffe
3 changed files with 130 additions and 17 deletions
|
@ -0,0 +1,110 @@
|
|||
error: future cannot be sent between threads safely
|
||||
--> $DIR/async-await-let-else.rs:48:13
|
||||
|
|
||||
LL | is_send(foo(Some(true)));
|
||||
| ^^^^^^^^^^^^^^^ future returned by `foo` is not `Send`
|
||||
|
|
||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<()>`
|
||||
note: future is not `Send` as this value is used across an await
|
||||
--> $DIR/async-await-let-else.rs:11:14
|
||||
|
|
||||
LL | let r = Rc::new(());
|
||||
| - has type `Rc<()>` which is not `Send`
|
||||
LL | bar().await
|
||||
| ^^^^^^ await occurs here, with `r` maybe used later
|
||||
LL | };
|
||||
| - `r` is later dropped here
|
||||
note: required by a bound in `is_send`
|
||||
--> $DIR/async-await-let-else.rs:19:15
|
||||
|
|
||||
LL | fn is_send<T: Send>(_: T) {}
|
||||
| ^^^^ required by this bound in `is_send`
|
||||
|
||||
error[E0277]: `Rc<()>` cannot be sent between threads safely
|
||||
--> $DIR/async-await-let-else.rs:50:13
|
||||
|
|
||||
LL | async fn foo2(x: Option<bool>) {
|
||||
| - within this `impl Future<Output = ()>`
|
||||
...
|
||||
LL | is_send(foo2(Some(true)));
|
||||
| ------- ^^^^^^^^^^^^^^^^ `Rc<()>` cannot be sent between threads safely
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<()>`
|
||||
note: required because it's used within this `async fn` body
|
||||
--> $DIR/async-await-let-else.rs:27:29
|
||||
|
|
||||
LL | async fn bar2<T>(_: T) -> ! {
|
||||
| _____________________________^
|
||||
LL | | panic!()
|
||||
LL | | }
|
||||
| |_^
|
||||
= note: required because it captures the following types: `ResumeTy`, `Option<bool>`, `impl Future<Output = !>`, `()`
|
||||
note: required because it's used within this `async fn` body
|
||||
--> $DIR/async-await-let-else.rs:21:32
|
||||
|
|
||||
LL | async fn foo2(x: Option<bool>) {
|
||||
| ________________________________^
|
||||
LL | | let Some(_) = x else {
|
||||
LL | | bar2(Rc::new(())).await
|
||||
LL | | };
|
||||
LL | | }
|
||||
| |_^
|
||||
note: required by a bound in `is_send`
|
||||
--> $DIR/async-await-let-else.rs:19:15
|
||||
|
|
||||
LL | fn is_send<T: Send>(_: T) {}
|
||||
| ^^^^ required by this bound in `is_send`
|
||||
|
||||
error: future cannot be sent between threads safely
|
||||
--> $DIR/async-await-let-else.rs:52:13
|
||||
|
|
||||
LL | is_send(foo3(Some(true)));
|
||||
| ^^^^^^^^^^^^^^^^ future returned by `foo3` is not `Send`
|
||||
|
|
||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<()>`
|
||||
note: future is not `Send` as this value is used across an await
|
||||
--> $DIR/async-await-let-else.rs:33:28
|
||||
|
|
||||
LL | (Rc::new(()), bar().await);
|
||||
| ----------- ^^^^^^ await occurs here, with `Rc::new(())` maybe used later
|
||||
| |
|
||||
| has type `Rc<()>` which is not `Send`
|
||||
note: `Rc::new(())` is later dropped here
|
||||
--> $DIR/async-await-let-else.rs:33:35
|
||||
|
|
||||
LL | (Rc::new(()), bar().await);
|
||||
| ^
|
||||
note: required by a bound in `is_send`
|
||||
--> $DIR/async-await-let-else.rs:19:15
|
||||
|
|
||||
LL | fn is_send<T: Send>(_: T) {}
|
||||
| ^^^^ required by this bound in `is_send`
|
||||
|
||||
error: future cannot be sent between threads safely
|
||||
--> $DIR/async-await-let-else.rs:54:13
|
||||
|
|
||||
LL | is_send(foo4(Some(true)));
|
||||
| ^^^^^^^^^^^^^^^^ future returned by `foo4` is not `Send`
|
||||
|
|
||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<()>`
|
||||
note: future is not `Send` as this value is used across an await
|
||||
--> $DIR/async-await-let-else.rs:41:14
|
||||
|
|
||||
LL | let r = Rc::new(());
|
||||
| - has type `Rc<()>` which is not `Send`
|
||||
LL | bar().await;
|
||||
| ^^^^^^ await occurs here, with `r` maybe used later
|
||||
...
|
||||
LL | };
|
||||
| - `r` is later dropped here
|
||||
note: required by a bound in `is_send`
|
||||
--> $DIR/async-await-let-else.rs:19:15
|
||||
|
|
||||
LL | fn is_send<T: Send>(_: T) {}
|
||||
| ^^^^ required by this bound in `is_send`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
|
@ -1,12 +1,12 @@
|
|||
error: future cannot be sent between threads safely
|
||||
--> $DIR/async-await-let-else.rs:45:13
|
||||
--> $DIR/async-await-let-else.rs:48:13
|
||||
|
|
||||
LL | is_send(foo(Some(true)));
|
||||
| ^^^^^^^^^^^^^^^ future returned by `foo` is not `Send`
|
||||
|
|
||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<()>`
|
||||
note: future is not `Send` as this value is used across an await
|
||||
--> $DIR/async-await-let-else.rs:8:14
|
||||
--> $DIR/async-await-let-else.rs:11:14
|
||||
|
|
||||
LL | let r = Rc::new(());
|
||||
| - has type `Rc<()>` which is not `Send`
|
||||
|
@ -15,20 +15,20 @@ LL | bar().await
|
|||
LL | };
|
||||
| - `r` is later dropped here
|
||||
note: required by a bound in `is_send`
|
||||
--> $DIR/async-await-let-else.rs:16:15
|
||||
--> $DIR/async-await-let-else.rs:19:15
|
||||
|
|
||||
LL | fn is_send<T: Send>(_: T) {}
|
||||
| ^^^^ required by this bound in `is_send`
|
||||
|
||||
error: future cannot be sent between threads safely
|
||||
--> $DIR/async-await-let-else.rs:47:13
|
||||
--> $DIR/async-await-let-else.rs:50:13
|
||||
|
|
||||
LL | is_send(foo2(Some(true)));
|
||||
| ^^^^^^^^^^^^^^^^ future returned by `foo2` is not `Send`
|
||||
|
|
||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<()>`
|
||||
note: future is not `Send` as this value is used across an await
|
||||
--> $DIR/async-await-let-else.rs:20:26
|
||||
--> $DIR/async-await-let-else.rs:23:26
|
||||
|
|
||||
LL | bar2(Rc::new(())).await
|
||||
| ----------- ^^^^^^ await occurs here, with `Rc::new(())` maybe used later
|
||||
|
@ -37,45 +37,45 @@ LL | bar2(Rc::new(())).await
|
|||
LL | };
|
||||
| - `Rc::new(())` is later dropped here
|
||||
note: required by a bound in `is_send`
|
||||
--> $DIR/async-await-let-else.rs:16:15
|
||||
--> $DIR/async-await-let-else.rs:19:15
|
||||
|
|
||||
LL | fn is_send<T: Send>(_: T) {}
|
||||
| ^^^^ required by this bound in `is_send`
|
||||
|
||||
error: future cannot be sent between threads safely
|
||||
--> $DIR/async-await-let-else.rs:49:13
|
||||
--> $DIR/async-await-let-else.rs:52:13
|
||||
|
|
||||
LL | is_send(foo3(Some(true)));
|
||||
| ^^^^^^^^^^^^^^^^ future returned by `foo3` is not `Send`
|
||||
|
|
||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<()>`
|
||||
note: future is not `Send` as this value is used across an await
|
||||
--> $DIR/async-await-let-else.rs:30:28
|
||||
--> $DIR/async-await-let-else.rs:33:28
|
||||
|
|
||||
LL | (Rc::new(()), bar().await);
|
||||
| ----------- ^^^^^^ await occurs here, with `Rc::new(())` maybe used later
|
||||
| |
|
||||
| has type `Rc<()>` which is not `Send`
|
||||
note: `Rc::new(())` is later dropped here
|
||||
--> $DIR/async-await-let-else.rs:30:35
|
||||
--> $DIR/async-await-let-else.rs:33:35
|
||||
|
|
||||
LL | (Rc::new(()), bar().await);
|
||||
| ^
|
||||
note: required by a bound in `is_send`
|
||||
--> $DIR/async-await-let-else.rs:16:15
|
||||
--> $DIR/async-await-let-else.rs:19:15
|
||||
|
|
||||
LL | fn is_send<T: Send>(_: T) {}
|
||||
| ^^^^ required by this bound in `is_send`
|
||||
|
||||
error: future cannot be sent between threads safely
|
||||
--> $DIR/async-await-let-else.rs:51:13
|
||||
--> $DIR/async-await-let-else.rs:54:13
|
||||
|
|
||||
LL | is_send(foo4(Some(true)));
|
||||
| ^^^^^^^^^^^^^^^^ future returned by `foo4` is not `Send`
|
||||
|
|
||||
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<()>`
|
||||
note: future is not `Send` as this value is used across an await
|
||||
--> $DIR/async-await-let-else.rs:38:14
|
||||
--> $DIR/async-await-let-else.rs:41:14
|
||||
|
|
||||
LL | let r = Rc::new(());
|
||||
| - has type `Rc<()>` which is not `Send`
|
||||
|
@ -85,7 +85,7 @@ LL | bar().await;
|
|||
LL | };
|
||||
| - `r` is later dropped here
|
||||
note: required by a bound in `is_send`
|
||||
--> $DIR/async-await-let-else.rs:16:15
|
||||
--> $DIR/async-await-let-else.rs:19:15
|
||||
|
|
||||
LL | fn is_send<T: Send>(_: T) {}
|
||||
| ^^^^ required by this bound in `is_send`
|
|
@ -1,4 +1,7 @@
|
|||
// edition:2021
|
||||
// revisions: drop-tracking no-drop-tracking
|
||||
// [drop-tracking] compile-flags: -Zdrop-tracking=yes
|
||||
// [no-drop-tracking] compile-flags: -Zdrop-tracking=no
|
||||
#![feature(let_else)]
|
||||
use std::rc::Rc;
|
||||
|
||||
|
@ -43,11 +46,11 @@ async fn foo4(x: Option<bool>) {
|
|||
|
||||
fn main() {
|
||||
is_send(foo(Some(true)));
|
||||
//~^ ERROR future cannot be sent between threads safely
|
||||
//~^ ERROR cannot be sent between threads safely
|
||||
is_send(foo2(Some(true)));
|
||||
//~^ ERROR future cannot be sent between threads safely
|
||||
//~^ ERROR cannot be sent between threads safely
|
||||
is_send(foo3(Some(true)));
|
||||
//~^ ERROR future cannot be sent between threads safely
|
||||
//~^ ERROR cannot be sent between threads safely
|
||||
is_send(foo4(Some(true)));
|
||||
//~^ ERROR future cannot be sent between threads safely
|
||||
//~^ ERROR cannot be sent between threads safely
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue