error[E0308]: mismatched types
  --> $DIR/expected-boxed-future-isnt-pinned.rs:11:5
   |
LL | fn foo<F: Future<Output=i32> + Send + 'static>(x: F) -> BoxFuture<'static, i32> {
   |        - this type parameter                            ----------------------- expected `Pin<Box<(dyn Future<Output = i32> + Send + 'static)>>` because of return type
LL |     // We could instead use an `async` block, but this way we have no std spans.
LL |     x
   |     ^ expected `Pin<Box<...>>`, found type parameter `F`
   |
   = note:      expected struct `Pin<Box<(dyn Future<Output = i32> + Send + 'static)>>`
           found type parameter `F`
help: you need to pin and box this expression
   |
LL |     Box::pin(x)
   |     +++++++++ +

error[E0308]: mismatched types
  --> $DIR/expected-boxed-future-isnt-pinned.rs:15:5
   |
LL | fn bar<F: Future<Output=i32> + Send + 'static>(x: F) -> BoxFuture<'static, i32> {
   |                                                         ----------------------- expected `Pin<Box<(dyn Future<Output = i32> + Send + 'static)>>` because of return type
LL |     Box::new(x)
   |     ^^^^^^^^^^^ expected `Pin<Box<...>>`, found `Box<F>`
   |
   = note: expected struct `Pin<Box<(dyn Future<Output = i32> + Send + 'static)>>`
              found struct `Box<F>`
   = help: use `Box::pin`

error[E0308]: mismatched types
  --> $DIR/expected-boxed-future-isnt-pinned.rs:19:14
   |
LL | fn baz<F: Future<Output=i32> + Send + 'static>(x: F) -> BoxFuture<'static, i32> {
   |        - this type parameter
LL |     Pin::new(x)
   |     -------- ^ expected `Box<dyn Future<Output = ...> + Send>`, found type parameter `F`
   |     |
   |     arguments to this function are incorrect
   |     help: use `Box::pin` to pin and box this expression: `Box::pin`
   |
   = note:      expected struct `Box<dyn Future<Output = i32> + Send>`
           found type parameter `F`
note: associated function defined here
  --> $SRC_DIR/core/src/pin.rs:LL:COL

error[E0277]: `dyn Future<Output = i32> + Send` cannot be unpinned
  --> $DIR/expected-boxed-future-isnt-pinned.rs:19:14
   |
LL |     Pin::new(x)
   |     -------- ^ the trait `Unpin` is not implemented for `dyn Future<Output = i32> + Send`
   |     |
   |     required by a bound introduced by this call
   |
   = note: consider using the `pin!` macro
           consider using `Box::pin` if you need to access the pinned value outside of the current scope
note: required by a bound in `Pin::<P>::new`
  --> $SRC_DIR/core/src/pin.rs:LL:COL

error[E0277]: `dyn Future<Output = i32> + Send` cannot be unpinned
  --> $DIR/expected-boxed-future-isnt-pinned.rs:24:14
   |
LL |     Pin::new(Box::new(x))
   |     -------- ^^^^^^^^^^^ the trait `Unpin` is not implemented for `dyn Future<Output = i32> + Send`
   |     |
   |     required by a bound introduced by this call
   |
   = note: consider using the `pin!` macro
           consider using `Box::pin` if you need to access the pinned value outside of the current scope
note: required by a bound in `Pin::<P>::new`
  --> $SRC_DIR/core/src/pin.rs:LL:COL

error[E0308]: mismatched types
  --> $DIR/expected-boxed-future-isnt-pinned.rs:28:5
   |
LL |   fn zap() -> BoxFuture<'static, i32> {
   |               ----------------------- expected `Pin<Box<(dyn Future<Output = i32> + Send + 'static)>>` because of return type
LL | /     async {
LL | |         42
LL | |     }
   | |_____^ expected `Pin<Box<...>>`, found `async` block
   |
   = note:     expected struct `Pin<Box<(dyn Future<Output = i32> + Send + 'static)>>`
           found `async` block `[async block@$DIR/expected-boxed-future-isnt-pinned.rs:28:5: 30:6]`
help: you need to pin and box this expression
   |
LL ~     Box::pin(async {
LL |         42
LL ~     })
   |

error: aborting due to 6 previous errors

Some errors have detailed explanations: E0277, E0308.
For more information about an error, try `rustc --explain E0277`.
