Use more precise span for E0282 in cast expressions

This commit is contained in:
Fabian Wolff 2021-06-03 19:52:01 +02:00
parent c5fbcd35a8
commit 74d1bd21c7
3 changed files with 23 additions and 2 deletions

View file

@ -609,8 +609,8 @@ impl<'a, 'tcx> CastCheck<'tcx> {
}
pub fn check(mut self, fcx: &FnCtxt<'a, 'tcx>) {
self.expr_ty = fcx.structurally_resolved_type(self.span, self.expr_ty);
self.cast_ty = fcx.structurally_resolved_type(self.span, self.cast_ty);
self.expr_ty = fcx.structurally_resolved_type(self.expr.span, self.expr_ty);
self.cast_ty = fcx.structurally_resolved_type(self.cast_span, self.cast_ty);
debug!("check_cast({}, {:?} as {:?})", self.expr.hir_id, self.expr_ty, self.cast_ty);

View file

@ -0,0 +1,10 @@
// Check that errors for unresolved types in cast expressions are reported
// for the offending subexpression, not the whole cast expression.
#![allow(unused_variables)]
fn main() {
let a = [1, 2, 3].iter().sum();
let b = (a + 1) as usize;
//~^ ERROR: type annotations needed [E0282]
}

View file

@ -0,0 +1,11 @@
error[E0282]: type annotations needed
--> $DIR/issue-85586.rs:8:13
|
LL | let b = (a + 1) as usize;
| ^^^^^^^ cannot infer type
|
= note: type must be known at this point
error: aborting due to previous error
For more information about this error, try `rustc --explain E0282`.