mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-19 11:12:43 +00:00
type error go brrrrrrrr
This commit is contained in:
parent
7276a6a117
commit
abb9a9853b
@ -187,8 +187,12 @@ impl<'tcx> Relate<'tcx> for ty::FnSig<'tcx> {
|
||||
})
|
||||
.enumerate()
|
||||
.map(|(i, r)| match r {
|
||||
Err(TypeError::Sorts(exp_found)) => Err(TypeError::ArgumentSorts(exp_found, i)),
|
||||
Err(TypeError::Mutability) => Err(TypeError::ArgumentMutability(i)),
|
||||
Err(TypeError::Sorts(exp_found) | TypeError::ArgumentSorts(exp_found, _)) => {
|
||||
Err(TypeError::ArgumentSorts(exp_found, i))
|
||||
}
|
||||
Err(TypeError::Mutability | TypeError::ArgumentMutability(_)) => {
|
||||
Err(TypeError::ArgumentMutability(i))
|
||||
}
|
||||
r => r,
|
||||
});
|
||||
Ok(ty::FnSig {
|
||||
|
@ -453,6 +453,7 @@ fn check_region_bounds_on_impl_item<'tcx>(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[instrument(level = "debug", skip(infcx))]
|
||||
fn extract_spans_for_error_reporting<'a, 'tcx>(
|
||||
infcx: &infer::InferCtxt<'a, 'tcx>,
|
||||
terr: &TypeError<'_>,
|
||||
|
17
src/test/ui/compare-method/issue-90444.rs
Normal file
17
src/test/ui/compare-method/issue-90444.rs
Normal file
@ -0,0 +1,17 @@
|
||||
pub struct A;
|
||||
impl From<fn((), (), &())> for A {
|
||||
fn from(_: fn((), (), &mut ())) -> Self {
|
||||
//~^ error: method `from` has an incompatible type for trait
|
||||
loop {}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct B;
|
||||
impl From<fn((), (), u32)> for B {
|
||||
fn from(_: fn((), (), u64)) -> Self {
|
||||
//~^ error: method `from` has an incompatible type for trait
|
||||
loop {}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
27
src/test/ui/compare-method/issue-90444.stderr
Normal file
27
src/test/ui/compare-method/issue-90444.stderr
Normal file
@ -0,0 +1,27 @@
|
||||
error[E0053]: method `from` has an incompatible type for trait
|
||||
--> $DIR/issue-90444.rs:3:16
|
||||
|
|
||||
LL | fn from(_: fn((), (), &mut ())) -> Self {
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| types differ in mutability
|
||||
| help: change the parameter type to match the trait: `for<'r> fn((), (), &'r ())`
|
||||
|
|
||||
= note: expected fn pointer `fn(for<'r> fn((), (), &'r ())) -> A`
|
||||
found fn pointer `fn(for<'r> fn((), (), &'r mut ())) -> A`
|
||||
|
||||
error[E0053]: method `from` has an incompatible type for trait
|
||||
--> $DIR/issue-90444.rs:11:16
|
||||
|
|
||||
LL | fn from(_: fn((), (), u64)) -> Self {
|
||||
| ^^^^^^^^^^^^^^^
|
||||
| |
|
||||
| expected `u32`, found `u64`
|
||||
| help: change the parameter type to match the trait: `fn((), (), u32)`
|
||||
|
|
||||
= note: expected fn pointer `fn(fn((), (), u32)) -> B`
|
||||
found fn pointer `fn(fn((), (), u64)) -> B`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0053`.
|
Loading…
Reference in New Issue
Block a user