diff --git a/compiler/rustc_typeck/src/check/cast.rs b/compiler/rustc_typeck/src/check/cast.rs index b3808eae1ad..181972e3e7b 100644 --- a/compiler/rustc_typeck/src/check/cast.rs +++ b/compiler/rustc_typeck/src/check/cast.rs @@ -604,8 +604,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); diff --git a/src/test/ui/cast/issue-85586.rs b/src/test/ui/cast/issue-85586.rs new file mode 100644 index 00000000000..78816582b57 --- /dev/null +++ b/src/test/ui/cast/issue-85586.rs @@ -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] +} diff --git a/src/test/ui/cast/issue-85586.stderr b/src/test/ui/cast/issue-85586.stderr new file mode 100644 index 00000000000..271885a133a --- /dev/null +++ b/src/test/ui/cast/issue-85586.stderr @@ -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`.