f0c93117ed
When encountering trait bound errors that satisfy some heuristics that tell us that the relevant trait for the user comes from the root obligation and not the current obligation, we use the root predicate for the main message. This allows to talk about "X doesn't implement Pattern<'_>" over the most specific case that just happened to fail, like "char doesn't implement Fn(&mut char)" in `tests/ui/traits/suggest-dereferences/root-obligation.rs` The heuristics are: - the type of the leaf predicate is (roughly) the same as the type from the root predicate, as a proxy for "we care about the root" - the leaf trait and the root trait are different, so as to avoid talking about `&mut T: Trait` and instead remain talking about `T: Trait` instead - the root trait is not `Unsize`, as to avoid talking about it in `tests/ui/coercion/coerce-issue-49593-box-never.rs`. ``` error[E0277]: the trait bound `&char: Pattern<'_>` is not satisfied --> $DIR/root-obligation.rs:6:38 | LL | .filter(|c| "aeiou".contains(c)) | -------- ^ the trait `Fn<(char,)>` is not implemented for `&char`, which is required by `&char: Pattern<'_>` | | | required by a bound introduced by this call | = note: required for `&char` to implement `FnOnce<(char,)>` = note: required for `&char` to implement `Pattern<'_>` note: required by a bound in `core::str::<impl str>::contains` --> $SRC_DIR/core/src/str/mod.rs:LL:COL help: consider dereferencing here | LL | .filter(|c| "aeiou".contains(*c)) | + ``` Fix #79359, fix #119983, fix #118779, cc #118415 (the suggestion needs to change).
118 lines
4.7 KiB
Plaintext
118 lines
4.7 KiB
Plaintext
error[E0277]: the trait bound `i32: Foo` is not satisfied
|
|
--> $DIR/feature-gate-trivial_bounds.rs:10:14
|
|
|
|
|
LL | enum E where i32: Foo { V }
|
|
| ^^^^^^^^ the trait `Foo` is not implemented for `i32`
|
|
|
|
|
= help: the trait `Foo` is implemented for `()`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the trait bound `i32: Foo` is not satisfied
|
|
--> $DIR/feature-gate-trivial_bounds.rs:12:16
|
|
|
|
|
LL | struct S where i32: Foo;
|
|
| ^^^^^^^^ the trait `Foo` is not implemented for `i32`
|
|
|
|
|
= help: the trait `Foo` is implemented for `()`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the trait bound `i32: Foo` is not satisfied
|
|
--> $DIR/feature-gate-trivial_bounds.rs:14:15
|
|
|
|
|
LL | trait T where i32: Foo {}
|
|
| ^^^^^^^^ the trait `Foo` is not implemented for `i32`
|
|
|
|
|
= help: the trait `Foo` is implemented for `()`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the trait bound `i32: Foo` is not satisfied
|
|
--> $DIR/feature-gate-trivial_bounds.rs:16:15
|
|
|
|
|
LL | union U where i32: Foo { f: i32 }
|
|
| ^^^^^^^^ the trait `Foo` is not implemented for `i32`
|
|
|
|
|
= help: the trait `Foo` is implemented for `()`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the trait bound `i32: Foo` is not satisfied
|
|
--> $DIR/feature-gate-trivial_bounds.rs:20:23
|
|
|
|
|
LL | impl Foo for () where i32: Foo {
|
|
| ^^^^^^^^ the trait `Foo` is not implemented for `i32`
|
|
|
|
|
= help: the trait `Foo` is implemented for `()`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the trait bound `i32: Foo` is not satisfied
|
|
--> $DIR/feature-gate-trivial_bounds.rs:28:14
|
|
|
|
|
LL | fn f() where i32: Foo
|
|
| ^^^^^^^^ the trait `Foo` is not implemented for `i32`
|
|
|
|
|
= help: the trait `Foo` is implemented for `()`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the trait bound `String: Neg` is not satisfied
|
|
--> $DIR/feature-gate-trivial_bounds.rs:36:38
|
|
|
|
|
LL | fn use_op(s: String) -> String where String: ::std::ops::Neg<Output=String> {
|
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Neg` is not implemented for `String`
|
|
|
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: `i32` is not an iterator
|
|
--> $DIR/feature-gate-trivial_bounds.rs:40:20
|
|
|
|
|
LL | fn use_for() where i32: Iterator {
|
|
| ^^^^^^^^^^^^^ `i32` is not an iterator
|
|
|
|
|
= help: the trait `Iterator` is not implemented for `i32`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the size for values of type `str` cannot be known at compilation time
|
|
--> $DIR/feature-gate-trivial_bounds.rs:52:32
|
|
|
|
|
LL | struct TwoStrs(str, str) where str: Sized;
|
|
| ^^^^^^^^^^ doesn't have a size known at compile-time
|
|
|
|
|
= help: the trait `Sized` is not implemented for `str`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the size for values of type `(dyn A + 'static)` cannot be known at compilation time
|
|
--> $DIR/feature-gate-trivial_bounds.rs:55:26
|
|
|
|
|
LL | fn unsized_local() where Dst<dyn A>: Sized {
|
|
| ^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
|
|
|
|
= help: within `Dst<(dyn A + 'static)>`, the trait `Sized` is not implemented for `(dyn A + 'static)`, which is required by `Dst<(dyn A + 'static)>: Sized`
|
|
note: required because it appears within the type `Dst<(dyn A + 'static)>`
|
|
--> $DIR/feature-gate-trivial_bounds.rs:48:8
|
|
|
|
|
LL | struct Dst<X: ?Sized> {
|
|
| ^^^
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error[E0277]: the size for values of type `str` cannot be known at compilation time
|
|
--> $DIR/feature-gate-trivial_bounds.rs:59:30
|
|
|
|
|
LL | fn return_str() -> str where str: Sized {
|
|
| ^^^^^^^^^^ doesn't have a size known at compile-time
|
|
|
|
|
= help: the trait `Sized` is not implemented for `str`
|
|
= help: see issue #48214
|
|
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
|
|
|
error: aborting due to 11 previous errors
|
|
|
|
For more information about this error, try `rustc --explain E0277`.
|