Rollup merge of #95751 - compiler-errors:ambig-int, r=jackh726
Don't report numeric inference ambiguity when we have previous errors Fixes #95648
This commit is contained in:
commit
d4e0ddf7c8
5 changed files with 48 additions and 35 deletions
16
src/test/ui/traits/no-fallback-multiple-impls.rs
Normal file
16
src/test/ui/traits/no-fallback-multiple-impls.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
trait Fallback {
|
||||
fn foo(&self) {}
|
||||
}
|
||||
|
||||
impl Fallback for i32 {}
|
||||
|
||||
impl Fallback for u64 {}
|
||||
|
||||
impl Fallback for usize {}
|
||||
|
||||
fn main() {
|
||||
missing();
|
||||
//~^ ERROR cannot find function `missing` in this scope
|
||||
0.foo();
|
||||
// But then we shouldn't report an inference ambiguity here...
|
||||
}
|
||||
9
src/test/ui/traits/no-fallback-multiple-impls.stderr
Normal file
9
src/test/ui/traits/no-fallback-multiple-impls.stderr
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
error[E0425]: cannot find function `missing` in this scope
|
||||
--> $DIR/no-fallback-multiple-impls.rs:12:5
|
||||
|
|
||||
LL | missing();
|
||||
| ^^^^^^^ not found in this scope
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0425`.
|
||||
|
|
@ -6,9 +6,9 @@ impl bar for i32 { fn dup(&self) -> i32 { *self } fn blah<X>(&self) {} }
|
|||
impl bar for u32 { fn dup(&self) -> u32 { *self } fn blah<X>(&self) {} }
|
||||
|
||||
fn main() {
|
||||
10.dup::<i32>(); //~ ERROR type annotations needed
|
||||
10.dup::<i32>();
|
||||
//~^ ERROR this associated function takes 0 generic arguments but 1
|
||||
10.blah::<i32, i32>(); //~ ERROR type annotations needed
|
||||
10.blah::<i32, i32>();
|
||||
//~^ ERROR this associated function takes 1 generic argument but 2
|
||||
(Box::new(10) as Box<dyn bar>).dup();
|
||||
//~^ ERROR E0038
|
||||
|
|
|
|||
|
|
@ -79,35 +79,7 @@ LL | trait bar { fn dup(&self) -> Self; fn blah<X>(&self); }
|
|||
= note: required because of the requirements on the impl of `CoerceUnsized<Box<dyn bar>>` for `Box<{integer}>`
|
||||
= note: required by cast to type `Box<dyn bar>`
|
||||
|
||||
error[E0283]: type annotations needed
|
||||
--> $DIR/test-2.rs:9:8
|
||||
|
|
||||
LL | 10.dup::<i32>();
|
||||
| ^^^ cannot infer type for type `{integer}`
|
||||
|
|
||||
note: multiple `impl`s satisfying `{integer}: bar` found
|
||||
--> $DIR/test-2.rs:5:1
|
||||
|
|
||||
LL | impl bar for i32 { fn dup(&self) -> i32 { *self } fn blah<X>(&self) {} }
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | impl bar for u32 { fn dup(&self) -> u32 { *self } fn blah<X>(&self) {} }
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
error[E0283]: type annotations needed
|
||||
--> $DIR/test-2.rs:11:8
|
||||
|
|
||||
LL | 10.blah::<i32, i32>();
|
||||
| ^^^^ cannot infer type for type `{integer}`
|
||||
|
|
||||
note: multiple `impl`s satisfying `{integer}: bar` found
|
||||
--> $DIR/test-2.rs:5:1
|
||||
|
|
||||
LL | impl bar for i32 { fn dup(&self) -> i32 { *self } fn blah<X>(&self) {} }
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | impl bar for u32 { fn dup(&self) -> u32 { *self } fn blah<X>(&self) {} }
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0038, E0107, E0283.
|
||||
Some errors have detailed explanations: E0038, E0107.
|
||||
For more information about an error, try `rustc --explain E0038`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue