diff options
Diffstat (limited to 'crates/hir_ty/src/infer/expr.rs')
-rw-r--r-- | crates/hir_ty/src/infer/expr.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/crates/hir_ty/src/infer/expr.rs b/crates/hir_ty/src/infer/expr.rs index b6b5a1b75..7278faeec 100644 --- a/crates/hir_ty/src/infer/expr.rs +++ b/crates/hir_ty/src/infer/expr.rs | |||
@@ -42,7 +42,7 @@ impl<'a> InferenceContext<'a> { | |||
42 | let could_unify = self.unify(&ty, &expected.ty); | 42 | let could_unify = self.unify(&ty, &expected.ty); |
43 | if !could_unify { | 43 | if !could_unify { |
44 | self.result.type_mismatches.insert( | 44 | self.result.type_mismatches.insert( |
45 | tgt_expr, | 45 | tgt_expr.into(), |
46 | TypeMismatch { expected: expected.ty.clone(), actual: ty.clone() }, | 46 | TypeMismatch { expected: expected.ty.clone(), actual: ty.clone() }, |
47 | ); | 47 | ); |
48 | } | 48 | } |
@@ -54,9 +54,10 @@ impl<'a> InferenceContext<'a> { | |||
54 | pub(super) fn infer_expr_coerce(&mut self, expr: ExprId, expected: &Expectation) -> Ty { | 54 | pub(super) fn infer_expr_coerce(&mut self, expr: ExprId, expected: &Expectation) -> Ty { |
55 | let ty = self.infer_expr_inner(expr, &expected); | 55 | let ty = self.infer_expr_inner(expr, &expected); |
56 | let ty = if !self.coerce(&ty, &expected.coercion_target()) { | 56 | let ty = if !self.coerce(&ty, &expected.coercion_target()) { |
57 | self.result | 57 | self.result.type_mismatches.insert( |
58 | .type_mismatches | 58 | expr.into(), |
59 | .insert(expr, TypeMismatch { expected: expected.ty.clone(), actual: ty.clone() }); | 59 | TypeMismatch { expected: expected.ty.clone(), actual: ty.clone() }, |
60 | ); | ||
60 | // Return actual type when type mismatch. | 61 | // Return actual type when type mismatch. |
61 | // This is needed for diagnostic when return type mismatch. | 62 | // This is needed for diagnostic when return type mismatch. |
62 | ty | 63 | ty |