Skip to content

Commit

Permalink
type error go brrrrrrrr
Browse files Browse the repository at this point in the history
  • Loading branch information
BoxyUwU committed Nov 6, 2021
1 parent 7276a6a commit abb9a98
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 2 deletions.
8 changes: 6 additions & 2 deletions compiler/rustc_middle/src/ty/relate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_typeck/src/check/compare_method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<'_>,
Expand Down
17 changes: 17 additions & 0 deletions src/test/ui/compare-method/issue-90444.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 27 additions & 0 deletions src/test/ui/compare-method/issue-90444.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit abb9a98

Please sign in to comment.