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);
   |          -----------       ^^^^^^ - `Rc::new(())` is later dropped here
   |          |                 |
   |          |                 await occurs here, with `Rc::new(())` maybe used later
   |          has type `Rc<()>` which is not `Send`
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`.
