e413c2e770
Added diagnostic for pin! macro in addition to Box::pin if Unpin isn't implemented I made a PR earlier, but accidentally renamed a branch and that deleted the PR... sorry for the duplicate Currently, if an operation on `Pin<T>` is performed that requires `T` to implement `Unpin`, the diagnostic suggestion is to use `Box::pin` ("note: consider using `Box::pin`"). This PR suggests pin! as well, as that's another valid way of pinning a value, and avoids a heap allocation. Appropriate diagnostic suggestions were included to highlight the difference in semantics (local pinning for pin! vs non-local for Box::pin). Fixes #109964
83 lines
2.8 KiB
Plaintext
83 lines
2.8 KiB
Plaintext
error[E0277]: the trait bound `String: Copy` is not satisfied
|
|
--> $DIR/issue-84973-blacklist.rs:15:12
|
|
|
|
|
LL | f_copy("".to_string());
|
|
| ------ ^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `String`
|
|
| |
|
|
| required by a bound introduced by this call
|
|
|
|
|
note: required by a bound in `f_copy`
|
|
--> $DIR/issue-84973-blacklist.rs:6:14
|
|
|
|
|
LL | fn f_copy<T: Copy>(t: T) {}
|
|
| ^^^^ required by this bound in `f_copy`
|
|
|
|
error[E0277]: the trait bound `S: Clone` is not satisfied
|
|
--> $DIR/issue-84973-blacklist.rs:16:13
|
|
|
|
|
LL | f_clone(S);
|
|
| ------- ^ the trait `Clone` is not implemented for `S`
|
|
| |
|
|
| required by a bound introduced by this call
|
|
|
|
|
note: required by a bound in `f_clone`
|
|
--> $DIR/issue-84973-blacklist.rs:7:15
|
|
|
|
|
LL | fn f_clone<T: Clone>(t: T) {}
|
|
| ^^^^^ required by this bound in `f_clone`
|
|
help: consider annotating `S` with `#[derive(Clone)]`
|
|
|
|
|
LL + #[derive(Clone)]
|
|
LL | struct S;
|
|
|
|
|
|
|
error[E0277]: `[static generator@$DIR/issue-84973-blacklist.rs:17:13: 17:22]` cannot be unpinned
|
|
--> $DIR/issue-84973-blacklist.rs:17:13
|
|
|
|
|
LL | f_unpin(static || { yield; });
|
|
| ------- ^^^^^^^^^^^^^^^^^^^^ the trait `Unpin` is not implemented for `[static generator@$DIR/issue-84973-blacklist.rs:17:13: 17:22]`
|
|
| |
|
|
| 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 `f_unpin`
|
|
--> $DIR/issue-84973-blacklist.rs:8:15
|
|
|
|
|
LL | fn f_unpin<T: Unpin>(t: T) {}
|
|
| ^^^^^ required by this bound in `f_unpin`
|
|
|
|
error[E0277]: the size for values of type `dyn Fn()` cannot be known at compilation time
|
|
--> $DIR/issue-84973-blacklist.rs:22:13
|
|
|
|
|
LL | f_sized(*ref_cl);
|
|
| ------- ^^^^^^^ doesn't have a size known at compile-time
|
|
| |
|
|
| required by a bound introduced by this call
|
|
|
|
|
= help: the trait `Sized` is not implemented for `dyn Fn()`
|
|
note: required by a bound in `f_sized`
|
|
--> $DIR/issue-84973-blacklist.rs:9:12
|
|
|
|
|
LL | fn f_sized<T: Sized>(t: T) {}
|
|
| ^ required by this bound in `f_sized`
|
|
|
|
error[E0277]: `Rc<{integer}>` cannot be sent between threads safely
|
|
--> $DIR/issue-84973-blacklist.rs:27:12
|
|
|
|
|
LL | f_send(rc);
|
|
| ------ ^^ `Rc<{integer}>` cannot be sent between threads safely
|
|
| |
|
|
| required by a bound introduced by this call
|
|
|
|
|
= help: the trait `Send` is not implemented for `Rc<{integer}>`
|
|
note: required by a bound in `f_send`
|
|
--> $DIR/issue-84973-blacklist.rs:10:14
|
|
|
|
|
LL | fn f_send<T: Send>(t: T) {}
|
|
| ^^^^ required by this bound in `f_send`
|
|
|
|
error: aborting due to 5 previous errors
|
|
|
|
For more information about this error, try `rustc --explain E0277`.
|