1
Fork 0

Rollup merge of #105338 - estebank:other-impls, r=compiler-errors

Tweak "the following other types implement trait"

When *any* of the suggested impls is an exact match, *only* show the exact matches. This is particularly relevant for integer types.

r? `@compiler-errors`
This commit is contained in:
Yuki Okushi 2022-12-06 12:48:54 +09:00 committed by GitHub
commit 1310d9bd2b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 138 additions and 395 deletions

View file

@ -1810,7 +1810,8 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
&self, &self,
trait_pred: ty::PolyTraitPredicate<'tcx>, trait_pred: ty::PolyTraitPredicate<'tcx>,
) -> Vec<ImplCandidate<'tcx>> { ) -> Vec<ImplCandidate<'tcx>> {
self.tcx let mut candidates: Vec<_> = self
.tcx
.all_impls(trait_pred.def_id()) .all_impls(trait_pred.def_id())
.filter_map(|def_id| { .filter_map(|def_id| {
if self.tcx.impl_polarity(def_id) == ty::ImplPolarity::Negative if self.tcx.impl_polarity(def_id) == ty::ImplPolarity::Negative
@ -1826,7 +1827,14 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
self.fuzzy_match_tys(trait_pred.skip_binder().self_ty(), imp.self_ty(), false) self.fuzzy_match_tys(trait_pred.skip_binder().self_ty(), imp.self_ty(), false)
.map(|similarity| ImplCandidate { trait_ref: imp, similarity }) .map(|similarity| ImplCandidate { trait_ref: imp, similarity })
}) })
.collect() .collect();
if candidates.iter().any(|c| matches!(c.similarity, CandidateSimilarity::Exact { .. })) {
// If any of the candidates is a perfect match, we don't want to show all of them.
// This is particularly relevant for the case of numeric types (as they all have the
// same cathegory).
candidates.retain(|c| matches!(c.similarity, CandidateSimilarity::Exact { .. }));
}
candidates
} }
fn report_similar_impl_candidates( fn report_similar_impl_candidates(

View file

@ -6,15 +6,10 @@ LL | x * y
| |
= help: the trait `Mul<f32>` is not implemented for `i32` = help: the trait `Mul<f32>` is not implemented for `i32`
= help: the following other types implement trait `Mul<Rhs>`: = help: the following other types implement trait `Mul<Rhs>`:
<&'a f32 as Mul<f32>>
<&'a f64 as Mul<f64>>
<&'a i128 as Mul<i128>>
<&'a i16 as Mul<i16>>
<&'a i32 as Mul<i32>> <&'a i32 as Mul<i32>>
<&'a i64 as Mul<i64>> <&i32 as Mul<&i32>>
<&'a i8 as Mul<i8>> <i32 as Mul<&i32>>
<&'a isize as Mul<isize>> <i32 as Mul>
and 49 others
error: aborting due to previous error error: aborting due to previous error

View file

@ -18,9 +18,7 @@ LL |
LL | 1_u32 LL | 1_u32
| ----- return type was inferred to be `u32` here | ----- return type was inferred to be `u32` here
| |
= help: the following other types implement trait `Traitor<N, M>`: = help: the trait `Traitor<N, 2>` is implemented for `u32`
<u32 as Traitor<N, 2>>
<u64 as Traitor<1, 2>>
error[E0277]: the trait bound `u64: Traitor` is not satisfied error[E0277]: the trait bound `u64: Traitor` is not satisfied
--> $DIR/rp_impl_trait_fail.rs:21:13 --> $DIR/rp_impl_trait_fail.rs:21:13
@ -31,9 +29,7 @@ LL |
LL | 1_u64 LL | 1_u64
| ----- return type was inferred to be `u64` here | ----- return type was inferred to be `u64` here
| |
= help: the following other types implement trait `Traitor<N, M>`: = help: the trait `Traitor<1, 2>` is implemented for `u64`
<u32 as Traitor<N, 2>>
<u64 as Traitor<1, 2>>
error: aborting due to 3 previous errors error: aborting due to 3 previous errors

View file

@ -12,15 +12,10 @@ LL | = [0; (i8::MAX + 1u8) as usize];
| |
= help: the trait `~const Add<u8>` is not implemented for `i8` = help: the trait `~const Add<u8>` is not implemented for `i8`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>>
<&'a f64 as Add<f64>>
<&'a i128 as Add<i128>>
<&'a i16 as Add<i16>>
<&'a i32 as Add<i32>>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>> <&'a i8 as Add<i8>>
<&'a isize as Add<isize>> <&i8 as Add<&i8>>
and 48 others <i8 as Add<&i8>>
<i8 as Add>
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View file

@ -12,15 +12,10 @@ LL | : [u32; (i8::MAX as i8 + 1u8) as usize]
| |
= help: the trait `~const Add<u8>` is not implemented for `i8` = help: the trait `~const Add<u8>` is not implemented for `i8`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>>
<&'a f64 as Add<f64>>
<&'a i128 as Add<i128>>
<&'a i16 as Add<i16>>
<&'a i32 as Add<i32>>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>> <&'a i8 as Add<i8>>
<&'a isize as Add<isize>> <&i8 as Add<&i8>>
and 48 others <i8 as Add<&i8>>
<i8 as Add>
error[E0604]: only `u8` can be cast as `char`, not `i8` error[E0604]: only `u8` can be cast as `char`, not `i8`
--> $DIR/const-eval-overflow-4b.rs:22:13 --> $DIR/const-eval-overflow-4b.rs:22:13

View file

@ -12,10 +12,6 @@ LL | Foo::<i32>::bar(&1i8);
<i8 as Foo<u32>> <i8 as Foo<u32>>
<i8 as Foo<u64>> <i8 as Foo<u64>>
<i8 as Foo<u8>> <i8 as Foo<u8>>
<u8 as Foo<bool>>
<u8 as Foo<u16>>
<u8 as Foo<u32>>
<u8 as Foo<u64>>
error[E0277]: the trait bound `u8: Foo<i32>` is not satisfied error[E0277]: the trait bound `u8: Foo<i32>` is not satisfied
--> $DIR/issue-39802-show-5-trait-impls.rs:25:21 --> $DIR/issue-39802-show-5-trait-impls.rs:25:21
@ -26,11 +22,6 @@ LL | Foo::<i32>::bar(&1u8);
| required by a bound introduced by this call | required by a bound introduced by this call
| |
= help: the following other types implement trait `Foo<B>`: = help: the following other types implement trait `Foo<B>`:
<i8 as Foo<bool>>
<i8 as Foo<u16>>
<i8 as Foo<u32>>
<i8 as Foo<u64>>
<i8 as Foo<u8>>
<u8 as Foo<bool>> <u8 as Foo<bool>>
<u8 as Foo<u16>> <u8 as Foo<u16>>
<u8 as Foo<u32>> <u8 as Foo<u32>>

View file

@ -30,15 +30,10 @@ LL | n + sum_to(n - 1)
| |
= help: the trait `Add<impl Foo>` is not implemented for `u32` = help: the trait `Add<impl Foo>` is not implemented for `u32`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>> <&'a u32 as Add<u32>>
<&'a f64 as Add<f64>> <&u32 as Add<&u32>>
<&'a i128 as Add<i128>> <u32 as Add<&u32>>
<&'a i16 as Add<i16>> <u32 as Add>
<&'a i32 as Add<i32>>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
error: aborting due to 2 previous errors; 1 warning emitted error: aborting due to 2 previous errors; 1 warning emitted

View file

@ -6,15 +6,10 @@ LL | 1.0f64 - 1
| |
= help: the trait `Sub<{integer}>` is not implemented for `f64` = help: the trait `Sub<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Sub<Rhs>`: = help: the following other types implement trait `Sub<Rhs>`:
<&'a f32 as Sub<f32>>
<&'a f64 as Sub<f64>> <&'a f64 as Sub<f64>>
<&'a i128 as Sub<i128>> <&f64 as Sub<&f64>>
<&'a i16 as Sub<i16>> <f64 as Sub<&f64>>
<&'a i32 as Sub<i32>> <f64 as Sub>
<&'a i64 as Sub<i64>>
<&'a i8 as Sub<i8>>
<&'a isize as Sub<isize>>
and 48 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | 1.0f64 - 1.0 LL | 1.0f64 - 1.0

View file

@ -4,16 +4,7 @@ error[E0277]: the trait bound `&'static mut isize: Copy` is not satisfied
LL | assert_copy::<&'static mut isize>(); LL | assert_copy::<&'static mut isize>();
| ^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `&'static mut isize` | ^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `&'static mut isize`
| |
= help: the following other types implement trait `Copy`: = help: the trait `Copy` is implemented for `isize`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
note: required by a bound in `assert_copy` note: required by a bound in `assert_copy`
--> $DIR/kindck-copy.rs:5:18 --> $DIR/kindck-copy.rs:5:18
| |
@ -26,16 +17,7 @@ error[E0277]: the trait bound `&'a mut isize: Copy` is not satisfied
LL | assert_copy::<&'a mut isize>(); LL | assert_copy::<&'a mut isize>();
| ^^^^^^^^^^^^^ the trait `Copy` is not implemented for `&'a mut isize` | ^^^^^^^^^^^^^ the trait `Copy` is not implemented for `&'a mut isize`
| |
= help: the following other types implement trait `Copy`: = help: the trait `Copy` is implemented for `isize`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
note: required by a bound in `assert_copy` note: required by a bound in `assert_copy`
--> $DIR/kindck-copy.rs:5:18 --> $DIR/kindck-copy.rs:5:18
| |

View file

@ -42,12 +42,11 @@ LL | if x == y {}
<&'a str as PartialEq<OsString>> <&'a str as PartialEq<OsString>>
<&'a str as PartialEq<String>> <&'a str as PartialEq<String>>
<&'b str as PartialEq<Cow<'a, str>>> <&'b str as PartialEq<Cow<'a, str>>>
<String as PartialEq<&'a str>>
<String as PartialEq<Cow<'a, str>>>
<String as PartialEq<str>>
<String as PartialEq>
<str as PartialEq<Cow<'a, str>>> <str as PartialEq<Cow<'a, str>>>
and 4 others <str as PartialEq<OsStr>>
<str as PartialEq<OsString>>
<str as PartialEq<String>>
<str as PartialEq>
error[E0308]: mismatched types error[E0308]: mismatched types
--> $DIR/lex-bad-char-literals-6.rs:15:20 --> $DIR/lex-bad-char-literals-6.rs:15:20
@ -68,12 +67,11 @@ LL | if x == z {}
<&'a str as PartialEq<OsString>> <&'a str as PartialEq<OsString>>
<&'a str as PartialEq<String>> <&'a str as PartialEq<String>>
<&'b str as PartialEq<Cow<'a, str>>> <&'b str as PartialEq<Cow<'a, str>>>
<String as PartialEq<&'a str>>
<String as PartialEq<Cow<'a, str>>>
<String as PartialEq<str>>
<String as PartialEq>
<str as PartialEq<Cow<'a, str>>> <str as PartialEq<Cow<'a, str>>>
and 4 others <str as PartialEq<OsStr>>
<str as PartialEq<OsString>>
<str as PartialEq<String>>
<str as PartialEq>
error: aborting due to 6 previous errors error: aborting due to 6 previous errors

View file

@ -24,15 +24,10 @@ LL | 2 as usize - Some(1);
| |
= help: the trait `Sub<Option<{integer}>>` is not implemented for `usize` = help: the trait `Sub<Option<{integer}>>` is not implemented for `usize`
= help: the following other types implement trait `Sub<Rhs>`: = help: the following other types implement trait `Sub<Rhs>`:
<&'a f32 as Sub<f32>> <&'a usize as Sub<usize>>
<&'a f64 as Sub<f64>> <&usize as Sub<&usize>>
<&'a i128 as Sub<i128>> <usize as Sub<&usize>>
<&'a i16 as Sub<i16>> <usize as Sub>
<&'a i32 as Sub<i32>>
<&'a i64 as Sub<i64>>
<&'a i8 as Sub<i8>>
<&'a isize as Sub<isize>>
and 48 others
error[E0277]: cannot multiply `{integer}` by `()` error[E0277]: cannot multiply `{integer}` by `()`
--> $DIR/binops.rs:4:7 --> $DIR/binops.rs:4:7

View file

@ -6,15 +6,10 @@ LL | 2_usize + (loop {});
| |
= help: the trait `Add<()>` is not implemented for `usize` = help: the trait `Add<()>` is not implemented for `usize`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>> <&'a usize as Add<usize>>
<&'a f64 as Add<f64>> <&usize as Add<&usize>>
<&'a i128 as Add<i128>> <usize as Add<&usize>>
<&'a i16 as Add<i16>> <usize as Add>
<&'a i32 as Add<i32>>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
error: aborting due to previous error error: aborting due to previous error

View file

@ -6,15 +6,10 @@ LL | x + 100.0
| |
= help: the trait `Add<{float}>` is not implemented for `u8` = help: the trait `Add<{float}>` is not implemented for `u8`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>> <&'a u8 as Add<u8>>
<&'a f64 as Add<f64>> <&u8 as Add<&u8>>
<&'a i128 as Add<i128>> <u8 as Add<&u8>>
<&'a i16 as Add<i16>> <u8 as Add>
<&'a i32 as Add<i32>>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
error[E0277]: cannot add `&str` to `f64` error[E0277]: cannot add `&str` to `f64`
--> $DIR/not-suggest-float-literal.rs:6:7 --> $DIR/not-suggest-float-literal.rs:6:7
@ -24,15 +19,10 @@ LL | x + "foo"
| |
= help: the trait `Add<&str>` is not implemented for `f64` = help: the trait `Add<&str>` is not implemented for `f64`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>>
<&'a f64 as Add<f64>> <&'a f64 as Add<f64>>
<&'a i128 as Add<i128>> <&f64 as Add<&f64>>
<&'a i16 as Add<i16>> <f64 as Add<&f64>>
<&'a i32 as Add<i32>> <f64 as Add>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
error[E0277]: cannot add `{integer}` to `f64` error[E0277]: cannot add `{integer}` to `f64`
--> $DIR/not-suggest-float-literal.rs:11:7 --> $DIR/not-suggest-float-literal.rs:11:7
@ -42,15 +32,10 @@ LL | x + y
| |
= help: the trait `Add<{integer}>` is not implemented for `f64` = help: the trait `Add<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>>
<&'a f64 as Add<f64>> <&'a f64 as Add<f64>>
<&'a i128 as Add<i128>> <&f64 as Add<&f64>>
<&'a i16 as Add<i16>> <f64 as Add<&f64>>
<&'a i32 as Add<i32>> <f64 as Add>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
error[E0277]: cannot subtract `{float}` from `u8` error[E0277]: cannot subtract `{float}` from `u8`
--> $DIR/not-suggest-float-literal.rs:15:7 --> $DIR/not-suggest-float-literal.rs:15:7
@ -60,15 +45,10 @@ LL | x - 100.0
| |
= help: the trait `Sub<{float}>` is not implemented for `u8` = help: the trait `Sub<{float}>` is not implemented for `u8`
= help: the following other types implement trait `Sub<Rhs>`: = help: the following other types implement trait `Sub<Rhs>`:
<&'a f32 as Sub<f32>> <&'a u8 as Sub<u8>>
<&'a f64 as Sub<f64>> <&u8 as Sub<&u8>>
<&'a i128 as Sub<i128>> <u8 as Sub<&u8>>
<&'a i16 as Sub<i16>> <u8 as Sub>
<&'a i32 as Sub<i32>>
<&'a i64 as Sub<i64>>
<&'a i8 as Sub<i8>>
<&'a isize as Sub<isize>>
and 48 others
error[E0277]: cannot subtract `&str` from `f64` error[E0277]: cannot subtract `&str` from `f64`
--> $DIR/not-suggest-float-literal.rs:19:7 --> $DIR/not-suggest-float-literal.rs:19:7
@ -78,15 +58,10 @@ LL | x - "foo"
| |
= help: the trait `Sub<&str>` is not implemented for `f64` = help: the trait `Sub<&str>` is not implemented for `f64`
= help: the following other types implement trait `Sub<Rhs>`: = help: the following other types implement trait `Sub<Rhs>`:
<&'a f32 as Sub<f32>>
<&'a f64 as Sub<f64>> <&'a f64 as Sub<f64>>
<&'a i128 as Sub<i128>> <&f64 as Sub<&f64>>
<&'a i16 as Sub<i16>> <f64 as Sub<&f64>>
<&'a i32 as Sub<i32>> <f64 as Sub>
<&'a i64 as Sub<i64>>
<&'a i8 as Sub<i8>>
<&'a isize as Sub<isize>>
and 48 others
error[E0277]: cannot subtract `{integer}` from `f64` error[E0277]: cannot subtract `{integer}` from `f64`
--> $DIR/not-suggest-float-literal.rs:24:7 --> $DIR/not-suggest-float-literal.rs:24:7
@ -96,15 +71,10 @@ LL | x - y
| |
= help: the trait `Sub<{integer}>` is not implemented for `f64` = help: the trait `Sub<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Sub<Rhs>`: = help: the following other types implement trait `Sub<Rhs>`:
<&'a f32 as Sub<f32>>
<&'a f64 as Sub<f64>> <&'a f64 as Sub<f64>>
<&'a i128 as Sub<i128>> <&f64 as Sub<&f64>>
<&'a i16 as Sub<i16>> <f64 as Sub<&f64>>
<&'a i32 as Sub<i32>> <f64 as Sub>
<&'a i64 as Sub<i64>>
<&'a i8 as Sub<i8>>
<&'a isize as Sub<isize>>
and 48 others
error[E0277]: cannot multiply `u8` by `{float}` error[E0277]: cannot multiply `u8` by `{float}`
--> $DIR/not-suggest-float-literal.rs:28:7 --> $DIR/not-suggest-float-literal.rs:28:7
@ -114,15 +84,10 @@ LL | x * 100.0
| |
= help: the trait `Mul<{float}>` is not implemented for `u8` = help: the trait `Mul<{float}>` is not implemented for `u8`
= help: the following other types implement trait `Mul<Rhs>`: = help: the following other types implement trait `Mul<Rhs>`:
<&'a f32 as Mul<f32>> <&'a u8 as Mul<u8>>
<&'a f64 as Mul<f64>> <&u8 as Mul<&u8>>
<&'a i128 as Mul<i128>> <u8 as Mul<&u8>>
<&'a i16 as Mul<i16>> <u8 as Mul>
<&'a i32 as Mul<i32>>
<&'a i64 as Mul<i64>>
<&'a i8 as Mul<i8>>
<&'a isize as Mul<isize>>
and 49 others
error[E0277]: cannot multiply `f64` by `&str` error[E0277]: cannot multiply `f64` by `&str`
--> $DIR/not-suggest-float-literal.rs:32:7 --> $DIR/not-suggest-float-literal.rs:32:7
@ -132,15 +97,10 @@ LL | x * "foo"
| |
= help: the trait `Mul<&str>` is not implemented for `f64` = help: the trait `Mul<&str>` is not implemented for `f64`
= help: the following other types implement trait `Mul<Rhs>`: = help: the following other types implement trait `Mul<Rhs>`:
<&'a f32 as Mul<f32>>
<&'a f64 as Mul<f64>> <&'a f64 as Mul<f64>>
<&'a i128 as Mul<i128>> <&f64 as Mul<&f64>>
<&'a i16 as Mul<i16>> <f64 as Mul<&f64>>
<&'a i32 as Mul<i32>> <f64 as Mul>
<&'a i64 as Mul<i64>>
<&'a i8 as Mul<i8>>
<&'a isize as Mul<isize>>
and 49 others
error[E0277]: cannot multiply `f64` by `{integer}` error[E0277]: cannot multiply `f64` by `{integer}`
--> $DIR/not-suggest-float-literal.rs:37:7 --> $DIR/not-suggest-float-literal.rs:37:7
@ -150,15 +110,10 @@ LL | x * y
| |
= help: the trait `Mul<{integer}>` is not implemented for `f64` = help: the trait `Mul<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Mul<Rhs>`: = help: the following other types implement trait `Mul<Rhs>`:
<&'a f32 as Mul<f32>>
<&'a f64 as Mul<f64>> <&'a f64 as Mul<f64>>
<&'a i128 as Mul<i128>> <&f64 as Mul<&f64>>
<&'a i16 as Mul<i16>> <f64 as Mul<&f64>>
<&'a i32 as Mul<i32>> <f64 as Mul>
<&'a i64 as Mul<i64>>
<&'a i8 as Mul<i8>>
<&'a isize as Mul<isize>>
and 49 others
error[E0277]: cannot divide `u8` by `{float}` error[E0277]: cannot divide `u8` by `{float}`
--> $DIR/not-suggest-float-literal.rs:41:7 --> $DIR/not-suggest-float-literal.rs:41:7
@ -168,15 +123,11 @@ LL | x / 100.0
| |
= help: the trait `Div<{float}>` is not implemented for `u8` = help: the trait `Div<{float}>` is not implemented for `u8`
= help: the following other types implement trait `Div<Rhs>`: = help: the following other types implement trait `Div<Rhs>`:
<&'a f32 as Div<f32>> <&'a u8 as Div<u8>>
<&'a f64 as Div<f64>> <&u8 as Div<&u8>>
<&'a i128 as Div<i128>> <u8 as Div<&u8>>
<&'a i16 as Div<i16>> <u8 as Div<NonZeroU8>>
<&'a i32 as Div<i32>> <u8 as Div>
<&'a i64 as Div<i64>>
<&'a i8 as Div<i8>>
<&'a isize as Div<isize>>
and 54 others
error[E0277]: cannot divide `f64` by `&str` error[E0277]: cannot divide `f64` by `&str`
--> $DIR/not-suggest-float-literal.rs:45:7 --> $DIR/not-suggest-float-literal.rs:45:7
@ -186,15 +137,10 @@ LL | x / "foo"
| |
= help: the trait `Div<&str>` is not implemented for `f64` = help: the trait `Div<&str>` is not implemented for `f64`
= help: the following other types implement trait `Div<Rhs>`: = help: the following other types implement trait `Div<Rhs>`:
<&'a f32 as Div<f32>>
<&'a f64 as Div<f64>> <&'a f64 as Div<f64>>
<&'a i128 as Div<i128>> <&f64 as Div<&f64>>
<&'a i16 as Div<i16>> <f64 as Div<&f64>>
<&'a i32 as Div<i32>> <f64 as Div>
<&'a i64 as Div<i64>>
<&'a i8 as Div<i8>>
<&'a isize as Div<isize>>
and 54 others
error[E0277]: cannot divide `f64` by `{integer}` error[E0277]: cannot divide `f64` by `{integer}`
--> $DIR/not-suggest-float-literal.rs:50:7 --> $DIR/not-suggest-float-literal.rs:50:7
@ -204,15 +150,10 @@ LL | x / y
| |
= help: the trait `Div<{integer}>` is not implemented for `f64` = help: the trait `Div<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Div<Rhs>`: = help: the following other types implement trait `Div<Rhs>`:
<&'a f32 as Div<f32>>
<&'a f64 as Div<f64>> <&'a f64 as Div<f64>>
<&'a i128 as Div<i128>> <&f64 as Div<&f64>>
<&'a i16 as Div<i16>> <f64 as Div<&f64>>
<&'a i32 as Div<i32>> <f64 as Div>
<&'a i64 as Div<i64>>
<&'a i8 as Div<i8>>
<&'a isize as Div<isize>>
and 54 others
error: aborting due to 12 previous errors error: aborting due to 12 previous errors

View file

@ -7,14 +7,9 @@ LL | x + 100
= help: the trait `Add<{integer}>` is not implemented for `f32` = help: the trait `Add<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>> <&'a f32 as Add<f32>>
<&'a f64 as Add<f64>> <&f32 as Add<&f32>>
<&'a i128 as Add<i128>> <f32 as Add<&f32>>
<&'a i16 as Add<i16>> <f32 as Add>
<&'a i32 as Add<i32>>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | x + 100.0 LL | x + 100.0
@ -28,15 +23,10 @@ LL | x + 100
| |
= help: the trait `Add<{integer}>` is not implemented for `f64` = help: the trait `Add<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>>
<&'a f64 as Add<f64>> <&'a f64 as Add<f64>>
<&'a i128 as Add<i128>> <&f64 as Add<&f64>>
<&'a i16 as Add<i16>> <f64 as Add<&f64>>
<&'a i32 as Add<i32>> <f64 as Add>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | x + 100.0 LL | x + 100.0
@ -51,14 +41,9 @@ LL | x - 100
= help: the trait `Sub<{integer}>` is not implemented for `f32` = help: the trait `Sub<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Sub<Rhs>`: = help: the following other types implement trait `Sub<Rhs>`:
<&'a f32 as Sub<f32>> <&'a f32 as Sub<f32>>
<&'a f64 as Sub<f64>> <&f32 as Sub<&f32>>
<&'a i128 as Sub<i128>> <f32 as Sub<&f32>>
<&'a i16 as Sub<i16>> <f32 as Sub>
<&'a i32 as Sub<i32>>
<&'a i64 as Sub<i64>>
<&'a i8 as Sub<i8>>
<&'a isize as Sub<isize>>
and 48 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | x - 100.0 LL | x - 100.0
@ -72,15 +57,10 @@ LL | x - 100
| |
= help: the trait `Sub<{integer}>` is not implemented for `f64` = help: the trait `Sub<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Sub<Rhs>`: = help: the following other types implement trait `Sub<Rhs>`:
<&'a f32 as Sub<f32>>
<&'a f64 as Sub<f64>> <&'a f64 as Sub<f64>>
<&'a i128 as Sub<i128>> <&f64 as Sub<&f64>>
<&'a i16 as Sub<i16>> <f64 as Sub<&f64>>
<&'a i32 as Sub<i32>> <f64 as Sub>
<&'a i64 as Sub<i64>>
<&'a i8 as Sub<i8>>
<&'a isize as Sub<isize>>
and 48 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | x - 100.0 LL | x - 100.0
@ -95,14 +75,9 @@ LL | x * 100
= help: the trait `Mul<{integer}>` is not implemented for `f32` = help: the trait `Mul<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Mul<Rhs>`: = help: the following other types implement trait `Mul<Rhs>`:
<&'a f32 as Mul<f32>> <&'a f32 as Mul<f32>>
<&'a f64 as Mul<f64>> <&f32 as Mul<&f32>>
<&'a i128 as Mul<i128>> <f32 as Mul<&f32>>
<&'a i16 as Mul<i16>> <f32 as Mul>
<&'a i32 as Mul<i32>>
<&'a i64 as Mul<i64>>
<&'a i8 as Mul<i8>>
<&'a isize as Mul<isize>>
and 49 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | x * 100.0 LL | x * 100.0
@ -116,15 +91,10 @@ LL | x * 100
| |
= help: the trait `Mul<{integer}>` is not implemented for `f64` = help: the trait `Mul<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Mul<Rhs>`: = help: the following other types implement trait `Mul<Rhs>`:
<&'a f32 as Mul<f32>>
<&'a f64 as Mul<f64>> <&'a f64 as Mul<f64>>
<&'a i128 as Mul<i128>> <&f64 as Mul<&f64>>
<&'a i16 as Mul<i16>> <f64 as Mul<&f64>>
<&'a i32 as Mul<i32>> <f64 as Mul>
<&'a i64 as Mul<i64>>
<&'a i8 as Mul<i8>>
<&'a isize as Mul<isize>>
and 49 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | x * 100.0 LL | x * 100.0
@ -139,14 +109,9 @@ LL | x / 100
= help: the trait `Div<{integer}>` is not implemented for `f32` = help: the trait `Div<{integer}>` is not implemented for `f32`
= help: the following other types implement trait `Div<Rhs>`: = help: the following other types implement trait `Div<Rhs>`:
<&'a f32 as Div<f32>> <&'a f32 as Div<f32>>
<&'a f64 as Div<f64>> <&f32 as Div<&f32>>
<&'a i128 as Div<i128>> <f32 as Div<&f32>>
<&'a i16 as Div<i16>> <f32 as Div>
<&'a i32 as Div<i32>>
<&'a i64 as Div<i64>>
<&'a i8 as Div<i8>>
<&'a isize as Div<isize>>
and 54 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | x / 100.0 LL | x / 100.0
@ -160,15 +125,10 @@ LL | x / 100
| |
= help: the trait `Div<{integer}>` is not implemented for `f64` = help: the trait `Div<{integer}>` is not implemented for `f64`
= help: the following other types implement trait `Div<Rhs>`: = help: the following other types implement trait `Div<Rhs>`:
<&'a f32 as Div<f32>>
<&'a f64 as Div<f64>> <&'a f64 as Div<f64>>
<&'a i128 as Div<i128>> <&f64 as Div<&f64>>
<&'a i16 as Div<i16>> <f64 as Div<&f64>>
<&'a i32 as Div<i32>> <f64 as Div>
<&'a i64 as Div<i64>>
<&'a i8 as Div<i8>>
<&'a isize as Div<isize>>
and 54 others
help: consider using a floating-point literal by writing it with `.0` help: consider using a floating-point literal by writing it with `.0`
| |
LL | x / 100.0 LL | x / 100.0

View file

@ -6,15 +6,10 @@ LL | foo(1 as u32 +
| |
= help: the trait `Add<()>` is not implemented for `u32` = help: the trait `Add<()>` is not implemented for `u32`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>> <&'a u32 as Add<u32>>
<&'a f64 as Add<f64>> <&u32 as Add<&u32>>
<&'a i128 as Add<i128>> <u32 as Add<&u32>>
<&'a i16 as Add<i16>> <u32 as Add>
<&'a i32 as Add<i32>>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
error: aborting due to previous error error: aborting due to previous error

View file

@ -7,10 +7,7 @@ LL | struct Foo<'a, T> {
LL | bar: &'a mut T LL | bar: &'a mut T
| ^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `&mut T` | ^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `&mut T`
| |
= help: the following other types implement trait `Clone`: = help: the trait `Clone` is implemented for `&T`
&T
*const T
*mut T
= note: `Clone` is implemented for `&T`, but not for `&mut T` = note: `Clone` is implemented for `&T`, but not for `&mut T`
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)

View file

@ -8,15 +8,8 @@ LL | Ok(Err(123_i32)?)
| |
= note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
= help: the following other types implement trait `From<T>`: = help: the following other types implement trait `From<T>`:
<f32 as From<i16>> <u8 as From<NonZeroU8>>
<f32 as From<i8>> <u8 as From<bool>>
<f32 as From<u16>>
<f32 as From<u8>>
<f64 as From<f32>>
<f64 as From<i16>>
<f64 as From<i32>>
<f64 as From<i8>>
and 68 others
= note: required for `Result<u64, u8>` to implement `FromResidual<Result<Infallible, i32>>` = note: required for `Result<u64, u8>` to implement `FromResidual<Result<Infallible, i32>>`
error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in a function that returns `Result` error[E0277]: the `?` operator can only be used on `Result`s, not `Option`s, in a function that returns `Result`

View file

@ -7,16 +7,7 @@ LL | 42_i32
| ------ return type was inferred to be `i32` here | ------ return type was inferred to be `i32` here
| |
= help: the trait `PartialEq<Foo>` is not implemented for `i32` = help: the trait `PartialEq<Foo>` is not implemented for `i32`
= help: the following other types implement trait `PartialEq<Rhs>`: = help: the trait `PartialEq` is implemented for `i32`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
error: aborting due to previous error error: aborting due to previous error

View file

@ -7,16 +7,7 @@ LL | i
| - return type was inferred to be `&i32` here | - return type was inferred to be `&i32` here
| |
= help: the trait `PartialEq<Bar<'b, 'static>>` is not implemented for `&i32` = help: the trait `PartialEq<Bar<'b, 'static>>` is not implemented for `&i32`
= help: the following other types implement trait `PartialEq<Rhs>`: = help: the trait `PartialEq` is implemented for `i32`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
error[E0277]: can't compare `&i32` with `Foo<'static, 'b>` error[E0277]: can't compare `&i32` with `Foo<'static, 'b>`
--> $DIR/self-referential-4.rs:11:31 --> $DIR/self-referential-4.rs:11:31
@ -27,16 +18,7 @@ LL | i
| - return type was inferred to be `&i32` here | - return type was inferred to be `&i32` here
| |
= help: the trait `PartialEq<Foo<'static, 'b>>` is not implemented for `&i32` = help: the trait `PartialEq<Foo<'static, 'b>>` is not implemented for `&i32`
= help: the following other types implement trait `PartialEq<Rhs>`: = help: the trait `PartialEq` is implemented for `i32`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
error[E0277]: can't compare `&i32` with `Moo<'static, 'a>` error[E0277]: can't compare `&i32` with `Moo<'static, 'a>`
--> $DIR/self-referential-4.rs:17:31 --> $DIR/self-referential-4.rs:17:31
@ -47,16 +29,7 @@ LL | i
| - return type was inferred to be `&i32` here | - return type was inferred to be `&i32` here
| |
= help: the trait `PartialEq<Moo<'static, 'a>>` is not implemented for `&i32` = help: the trait `PartialEq<Moo<'static, 'a>>` is not implemented for `&i32`
= help: the following other types implement trait `PartialEq<Rhs>`: = help: the trait `PartialEq` is implemented for `i32`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
error: aborting due to 3 previous errors error: aborting due to 3 previous errors

View file

@ -8,16 +8,7 @@ LL | i
| - return type was inferred to be `&i32` here | - return type was inferred to be `&i32` here
| |
= help: the trait `PartialEq<Bar<'b, 'a>>` is not implemented for `&i32` = help: the trait `PartialEq<Bar<'b, 'a>>` is not implemented for `&i32`
= help: the following other types implement trait `PartialEq<Rhs>`: = help: the trait `PartialEq` is implemented for `i32`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
error[E0277]: can't compare `&i32` with `(i32, &i32)` error[E0277]: can't compare `&i32` with `(i32, &i32)`
--> $DIR/self-referential.rs:12:31 --> $DIR/self-referential.rs:12:31
@ -29,16 +20,7 @@ LL | (42, i)
| ------- return type was inferred to be `(i32, &i32)` here | ------- return type was inferred to be `(i32, &i32)` here
| |
= help: the trait `PartialEq<(i32, &i32)>` is not implemented for `&i32` = help: the trait `PartialEq<(i32, &i32)>` is not implemented for `&i32`
= help: the following other types implement trait `PartialEq<Rhs>`: = help: the trait `PartialEq` is implemented for `i32`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
error[E0277]: can't compare `&i32` with `(i32, Moo<'b, 'a>::{opaque#0})` error[E0277]: can't compare `&i32` with `(i32, Moo<'b, 'a>::{opaque#0})`
--> $DIR/self-referential.rs:19:31 --> $DIR/self-referential.rs:19:31
@ -50,16 +32,7 @@ LL | (42, i)
| ------- return type was inferred to be `(i32, &i32)` here | ------- return type was inferred to be `(i32, &i32)` here
| |
= help: the trait `PartialEq<(i32, Moo<'b, 'a>::{opaque#0})>` is not implemented for `&i32` = help: the trait `PartialEq<(i32, Moo<'b, 'a>::{opaque#0})>` is not implemented for `&i32`
= help: the following other types implement trait `PartialEq<Rhs>`: = help: the trait `PartialEq` is implemented for `i32`
f32
f64
i128
i16
i32
i64
i8
isize
and 6 others
error: aborting due to 3 previous errors error: aborting due to 3 previous errors

View file

@ -66,15 +66,10 @@ LL | trait ProjectionPred<T:Iterator = IntoIter<i32>> where T::Item : Add<u8> {}
| |
= help: the trait `Add<u8>` is not implemented for `i32` = help: the trait `Add<u8>` is not implemented for `i32`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>>
<&'a f64 as Add<f64>>
<&'a i128 as Add<i128>>
<&'a i16 as Add<i16>>
<&'a i32 as Add<i32>> <&'a i32 as Add<i32>>
<&'a i64 as Add<i64>> <&i32 as Add<&i32>>
<&'a i8 as Add<i8>> <i32 as Add<&i32>>
<&'a isize as Add<isize>> <i32 as Add>
and 48 others
error: aborting due to 7 previous errors error: aborting due to 7 previous errors

View file

@ -21,15 +21,10 @@ LL | a = c + b * 5;
| |
= help: the trait `Add<u16>` is not implemented for `usize` = help: the trait `Add<u16>` is not implemented for `usize`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>> <&'a usize as Add<usize>>
<&'a f64 as Add<f64>> <&usize as Add<&usize>>
<&'a i128 as Add<i128>> <usize as Add<&usize>>
<&'a i16 as Add<i16>> <usize as Add>
<&'a i32 as Add<i32>>
<&'a i64 as Add<i64>>
<&'a i8 as Add<i8>>
<&'a isize as Add<isize>>
and 48 others
error: aborting due to 3 previous errors error: aborting due to 3 previous errors

View file

@ -8,15 +8,10 @@ LL | <i32 as Add<u32>>::add(1, 2);
| |
= help: the trait `Add<u32>` is not implemented for `i32` = help: the trait `Add<u32>` is not implemented for `i32`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>>
<&'a f64 as Add<f64>>
<&'a i128 as Add<i128>>
<&'a i16 as Add<i16>>
<&'a i32 as Add<i32>> <&'a i32 as Add<i32>>
<&'a i64 as Add<i64>> <&i32 as Add<&i32>>
<&'a i8 as Add<i8>> <i32 as Add<&i32>>
<&'a isize as Add<isize>> <i32 as Add>
and 48 others
error[E0308]: mismatched types error[E0308]: mismatched types
--> $DIR/ufcs-qpath-self-mismatch.rs:7:28 --> $DIR/ufcs-qpath-self-mismatch.rs:7:28
@ -62,15 +57,10 @@ LL | <i32 as Add<u32>>::add(1, 2);
| |
= help: the trait `Add<u32>` is not implemented for `i32` = help: the trait `Add<u32>` is not implemented for `i32`
= help: the following other types implement trait `Add<Rhs>`: = help: the following other types implement trait `Add<Rhs>`:
<&'a f32 as Add<f32>>
<&'a f64 as Add<f64>>
<&'a i128 as Add<i128>>
<&'a i16 as Add<i16>>
<&'a i32 as Add<i32>> <&'a i32 as Add<i32>>
<&'a i64 as Add<i64>> <&i32 as Add<&i32>>
<&'a i8 as Add<i8>> <i32 as Add<&i32>>
<&'a isize as Add<isize>> <i32 as Add>
and 48 others
error: aborting due to 4 previous errors error: aborting due to 4 previous errors