Don't resolve type var roots in point_at_expr_source_of_inferred_type

This commit is contained in:
Michael Goulet 2023-01-21 21:54:49 +00:00
parent c8e6a9e8b6
commit bed3bb53d2
3 changed files with 37 additions and 1 deletions

View file

@ -0,0 +1,14 @@
// The error message here still is pretty confusing.
fn main() {
let mut result = vec![1];
// The type of `result` is constrained to be `Vec<{integer}>` here.
// But the logic we use to find what expression constrains a type
// is not sophisticated enough to know this.
let mut vector = Vec::new();
vector.sort();
result.push(vector);
//~^ ERROR mismatched types
// So it thinks that the type of `result` is constrained here.
}

View file

@ -0,0 +1,20 @@
error[E0308]: mismatched types
--> $DIR/bad-type-in-vec-push.rs:11:17
|
LL | vector.sort();
| ------ here the type of `vector` is inferred to be `Vec<_>`
LL | result.push(vector);
| ---- ^^^^^^
| | |
| | expected integer, found struct `Vec`
| | this is of type `Vec<_>`, which causes `result` to be inferred as `Vec<{integer}>`
| arguments to this method are incorrect
|
= note: expected type `{integer}`
found struct `Vec<_>`
note: associated function defined here
--> $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`.