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`.
