Use .name_str() to format primitive types in error messages

This commit is contained in:
Fabian Wolff 2021-05-11 18:12:36 +02:00
parent 506e75cbf8
commit f740923b8c
3 changed files with 63 additions and 2 deletions

View file

@ -159,10 +159,23 @@ impl<'tcx> fmt::Display for TypeError<'tcx> {
)
}),
IntMismatch(ref values) => {
write!(f, "expected `{:?}`, found `{:?}`", values.expected, values.found)
let expected = match values.expected {
ty::IntVarValue::IntType(ty) => ty.name_str(),
ty::IntVarValue::UintType(ty) => ty.name_str(),
};
let found = match values.found {
ty::IntVarValue::IntType(ty) => ty.name_str(),
ty::IntVarValue::UintType(ty) => ty.name_str(),
};
write!(f, "expected `{}`, found `{}`", expected, found)
}
FloatMismatch(ref values) => {
write!(f, "expected `{:?}`, found `{:?}`", values.expected, values.found)
write!(
f,
"expected `{}`, found `{}`",
values.expected.name_str(),
values.found.name_str()
)
}
VariadicMismatch(ref values) => write!(
f,

View file

@ -0,0 +1,21 @@
fn foo(length: &u32) -> i32 {
0
}
fn bar(length: &f32) -> f64 {
0.0
}
fn main() {
let mut length = 0;
length = { foo(&length) };
//~^ ERROR mismatched types [E0308]
length = foo(&length);
//~^ ERROR mismatched types [E0308]
let mut float_length = 0.0;
float_length = { bar(&float_length) };
//~^ ERROR mismatched types [E0308]
float_length = bar(&float_length);
//~^ ERROR mismatched types [E0308]
}

View file

@ -0,0 +1,27 @@
error[E0308]: mismatched types
--> $DIR/issue-84976.rs:11:16
|
LL | length = { foo(&length) };
| ^^^^^^^^^^^^ expected `u32`, found `i32`
error[E0308]: mismatched types
--> $DIR/issue-84976.rs:13:14
|
LL | length = foo(&length);
| ^^^^^^^^^^^^ expected `u32`, found `i32`
error[E0308]: mismatched types
--> $DIR/issue-84976.rs:17:22
|
LL | float_length = { bar(&float_length) };
| ^^^^^^^^^^^^^^^^^^ expected `f32`, found `f64`
error[E0308]: mismatched types
--> $DIR/issue-84976.rs:19:20
|
LL | float_length = bar(&float_length);
| ^^^^^^^^^^^^^^^^^^ expected `f32`, found `f64`
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0308`.