selection failure: recompute applicable impls
This commit is contained in:
parent
ddfe1e87f7
commit
f1551bfc02
21 changed files with 166 additions and 73 deletions
|
|
@ -1,3 +1,4 @@
|
|||
fn main() {
|
||||
let x = "hello".chars().rev().collect(); //~ ERROR E0282
|
||||
let x = "hello".chars().rev().collect();
|
||||
//~^ ERROR E0282
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ fn foo<T>(x: T) {
|
|||
W: Fn()>
|
||||
(y: T) { //~ ERROR E0401
|
||||
}
|
||||
bfnr(x); //~ ERROR type annotations needed
|
||||
bfnr(x);
|
||||
//~^ ERROR type annotations needed
|
||||
//~| ERROR type annotations needed
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ LL | (y: T) {
|
|||
| ^ use of generic parameter from outer function
|
||||
|
||||
error[E0401]: can't use generic parameters from outer function
|
||||
--> $DIR/E0401.rs:22:25
|
||||
--> $DIR/E0401.rs:24:25
|
||||
|
|
||||
LL | impl<T> Iterator for A<T> {
|
||||
| ---- `Self` type implicitly declared here, by this `impl`
|
||||
|
|
@ -43,7 +43,28 @@ help: consider specifying the generic arguments
|
|||
LL | bfnr::<U, V, W>(x);
|
||||
| +++++++++++
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error[E0283]: type annotations needed
|
||||
--> $DIR/E0401.rs:11:5
|
||||
|
|
||||
LL | bfnr(x);
|
||||
| ^^^^ cannot infer type of the type parameter `W` declared on the function `bfnr`
|
||||
|
|
||||
= note: multiple `impl`s satisfying `_: Fn<()>` found in the following crates: `alloc`, `core`:
|
||||
- impl<A, F> Fn<A> for &F
|
||||
where A: Tuple, F: Fn<A>, F: ?Sized;
|
||||
- impl<Args, F, A> Fn<Args> for Box<F, A>
|
||||
where Args: Tuple, F: Fn<Args>, A: Allocator, F: ?Sized;
|
||||
note: required by a bound in `bfnr`
|
||||
--> $DIR/E0401.rs:4:30
|
||||
|
|
||||
LL | fn bfnr<U, V: Baz<U>, W: Fn()>(y: T) {
|
||||
| ^^^^ required by this bound in `bfnr`
|
||||
help: consider specifying the type arguments in the function call
|
||||
|
|
||||
LL | bfnr::<U, V, W>(x);
|
||||
| +++++++++++
|
||||
|
||||
Some errors have detailed explanations: E0282, E0401.
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0282, E0283, E0401.
|
||||
For more information about an error, try `rustc --explain E0282`.
|
||||
|
|
|
|||
|
|
@ -30,16 +30,19 @@ fn baa(b: bool) -> impl std::fmt::Debug {
|
|||
|
||||
fn muh() -> Result<(), impl std::fmt::Debug> {
|
||||
Err("whoops")?;
|
||||
Ok(()) //~ ERROR type annotations needed
|
||||
Ok(())
|
||||
//~^ ERROR type annotations needed
|
||||
}
|
||||
|
||||
fn muh2() -> Result<(), impl std::fmt::Debug> {
|
||||
return Err(From::from("foo")); //~ ERROR type annotations needed
|
||||
return Err(From::from("foo"));
|
||||
//~^ ERROR type annotations needed
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn muh3() -> Result<(), impl std::fmt::Debug> {
|
||||
Err(From::from("foo")) //~ ERROR type annotations needed
|
||||
Err(From::from("foo"))
|
||||
//~^ ERROR type annotations needed
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ LL | Ok::<(), E>(())
|
|||
| +++++++++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/cross-return-site-inference.rs:37:12
|
||||
--> $DIR/cross-return-site-inference.rs:38:12
|
||||
|
|
||||
LL | return Err(From::from("foo"));
|
||||
| ^^^ cannot infer type of the type parameter `E` declared on the enum `Result`
|
||||
|
|
@ -21,7 +21,7 @@ LL | return Err::<(), E>(From::from("foo"));
|
|||
| +++++++++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/cross-return-site-inference.rs:42:5
|
||||
--> $DIR/cross-return-site-inference.rs:44:5
|
||||
|
|
||||
LL | Err(From::from("foo"))
|
||||
| ^^^ cannot infer type of the type parameter `E` declared on the enum `Result`
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ fn main() {
|
|||
let fut = async {
|
||||
make_unit()?;
|
||||
|
||||
Ok(()) //~ ERROR type annotations needed
|
||||
Ok(())
|
||||
//~^ ERROR type annotations needed
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
fn main() {
|
||||
let x = |a: (), b: ()| {
|
||||
Err(a)?;
|
||||
Ok(b) //~ ERROR type annotations needed
|
||||
Ok(b)
|
||||
//~^ ERROR type annotations needed
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,8 @@ use std::collections::hash_map::HashMap;
|
|||
|
||||
fn foo(parameters: &HashMap<String, String>) -> bool {
|
||||
parameters
|
||||
.get(&"key".into()) //~ ERROR: type annotations needed
|
||||
.get(&"key".into())
|
||||
//~^ ERROR type annotations needed
|
||||
.and_then(|found: &String| Some(false))
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,8 @@ pub fn main() {
|
|||
}
|
||||
{
|
||||
if String::from("a") == "a".try_into().unwrap() {}
|
||||
//~^ ERROR: type annotations needed
|
||||
//~^ ERROR type annotations needed
|
||||
//~| ERROR type annotations needed
|
||||
}
|
||||
{
|
||||
let _: String = match "_".try_into() {
|
||||
|
|
|
|||
|
|
@ -16,6 +16,22 @@ help: try using a fully qualified path to specify the expected types
|
|||
LL | if String::from("a") == <&str as TryInto<T>>::try_into("a").unwrap() {}
|
||||
| +++++++++++++++++++++++++++++++ ~
|
||||
|
||||
error: aborting due to previous error
|
||||
error[E0283]: type annotations needed
|
||||
--> $DIR/issue-72616.rs:20:37
|
||||
|
|
||||
LL | if String::from("a") == "a".try_into().unwrap() {}
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: multiple `impl`s satisfying `_: TryFrom<&str>` found in the following crates: `core`, `std`:
|
||||
- impl<> TryFrom<&str> for std::sys_common::net::LookupHost;
|
||||
- impl<T, U> TryFrom<U> for T
|
||||
where U: Into<T>;
|
||||
= note: required for `&str` to implement `TryInto<_>`
|
||||
help: try using a fully qualified path to specify the expected types
|
||||
|
|
||||
LL | if String::from("a") == <&str as TryInto<T>>::try_into("a").unwrap() {}
|
||||
| +++++++++++++++++++++++++++++++ ~
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0283`.
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@ fn f(x: &i32) -> Result<i32, ()> {
|
|||
|
||||
fn g() -> Result<Vec<i32>, ()> {
|
||||
let l = [1, 2, 3, 4];
|
||||
l.iter().map(f).collect()? //~ ERROR type annotations needed
|
||||
l.iter().map(f).collect()?
|
||||
//~^ ERROR type annotations needed
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
fn main() {
|
||||
let n: u32 = 1;
|
||||
let mut d: u64 = 2;
|
||||
d = d % n.into(); //~ ERROR type annotations needed
|
||||
d = d % n.into();
|
||||
//~^ ERROR type annotations needed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,12 +46,7 @@ LL | let ips: Vec<_> = (0..100_000).map(|_| u32::from(0u32.into())).collect(
|
|||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= note: multiple `impl`s satisfying `u32: From<_>` found in the following crates: `core`, `std`:
|
||||
- impl From<Ipv4Addr> for u32;
|
||||
- impl From<NonZeroU32> for u32;
|
||||
- impl From<bool> for u32;
|
||||
- impl From<char> for u32;
|
||||
and 3 more
|
||||
= note: cannot satisfy `u32: From<_>`
|
||||
help: try using a fully qualified path to specify the expected types
|
||||
|
|
||||
LL | let ips: Vec<_> = (0..100_000).map(|_| u32::from(<u32 as Into<T>>::into(0u32))).collect();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue