Auto merge of #85971 - FabianWolff:issue-85586, r=davidtwco
Use more precise span for E0282 in cast expressions This pull request fixes #85586. The example code given there: ```rust fn main() { let a = [1, 2, 3].iter().sum(); let b = (a + 1) as usize; } ``` currently produces ``` error[E0282]: type annotations needed --> issue-85586.rs:3:13 | 3 | let b = (a + 1) as usize; | ^^^^^^^^^^^^^^^^ cannot infer type | = note: type must be known at this point error: aborting due to previous error ``` even though the type of the entire cast expression quite clearly should be `usize`. The error is in the cast's left-hand side, which is made explicit by the changes in this PR: ``` error[E0282]: type annotations needed --> issue-85586.rs:3:13 | 3 | let b = (a + 1) as usize; | ^^^^^^^ cannot infer type | = note: type must be known at this point error: aborting due to previous error ```
This commit is contained in:
commit
f3f8e758f2
@ -604,8 +604,8 @@ impl<'a, 'tcx> CastCheck<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn check(mut self, fcx: &FnCtxt<'a, 'tcx>) {
|
pub fn check(mut self, fcx: &FnCtxt<'a, 'tcx>) {
|
||||||
self.expr_ty = fcx.structurally_resolved_type(self.span, self.expr_ty);
|
self.expr_ty = fcx.structurally_resolved_type(self.expr.span, self.expr_ty);
|
||||||
self.cast_ty = fcx.structurally_resolved_type(self.span, self.cast_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);
|
debug!("check_cast({}, {:?} as {:?})", self.expr.hir_id, self.expr_ty, self.cast_ty);
|
||||||
|
|
||||||
|
10
src/test/ui/cast/issue-85586.rs
Normal file
10
src/test/ui/cast/issue-85586.rs
Normal 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]
|
||||||
|
}
|
11
src/test/ui/cast/issue-85586.stderr
Normal file
11
src/test/ui/cast/issue-85586.stderr
Normal 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`.
|
Loading…
x
Reference in New Issue
Block a user