diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2023-09-22 22:20:00 +0000 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2023-09-25 15:55:59 +0000 |
| commit | 2e0ad2025fbae45f58149c321d2492a36808fea4 (patch) | |
| tree | b7faa2e4b8e85b5ef7070685467287709ac8de88 | |
| parent | f6d4950fee86c162ad0716b85b2c43111916c2ce (diff) | |
| download | rust-2e0ad2025fbae45f58149c321d2492a36808fea4.tar.gz rust-2e0ad2025fbae45f58149c321d2492a36808fea4.zip | |
Handle yet another case of `break` type mismatch
| -rw-r--r-- | compiler/rustc_hir_typeck/src/expr.rs | 7 | ||||
| -rw-r--r-- | tests/ui/loops/loop-break-value.stderr | 5 |
2 files changed, 10 insertions, 2 deletions
diff --git a/compiler/rustc_hir_typeck/src/expr.rs b/compiler/rustc_hir_typeck/src/expr.rs index 4ad14ce3059..5fc8b1f9fbe 100644 --- a/compiler/rustc_hir_typeck/src/expr.rs +++ b/compiler/rustc_hir_typeck/src/expr.rs @@ -43,7 +43,10 @@ use rustc_infer::traits::query::NoSolution; use rustc_infer::traits::ObligationCause; use rustc_middle::middle::stability; use rustc_middle::ty::adjustment::{Adjust, Adjustment, AllowTwoPhase}; -use rustc_middle::ty::error::TypeError::FieldMisMatch; +use rustc_middle::ty::error::{ + ExpectedFound, + TypeError::{FieldMisMatch, Sorts}, +}; use rustc_middle::ty::GenericArgsRef; use rustc_middle::ty::{self, AdtKind, Ty, TypeVisitableExt}; use rustc_session::errors::ExprParenthesesNeeded; @@ -664,6 +667,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { self.suggest_mismatched_types_on_tail( &mut err, expr, ty, e_ty, target_id, ); + let error = Some(Sorts(ExpectedFound { expected: ty, found: e_ty })); + self.annotate_loop_expected_due_to_inference(&mut err, expr, error); if let Some(val) = ty_kind_suggestion(ty) { let label = destination .label diff --git a/tests/ui/loops/loop-break-value.stderr b/tests/ui/loops/loop-break-value.stderr index dfea1f53d0d..9c76266a9de 100644 --- a/tests/ui/loops/loop-break-value.stderr +++ b/tests/ui/loops/loop-break-value.stderr @@ -134,7 +134,10 @@ error[E0308]: mismatched types --> $DIR/loop-break-value.rs:4:31 | LL | let val: ! = loop { break break; }; - | ^^^^^ expected `!`, found `()` + | --- ---- ^^^^^ expected `!`, found `()` + | | | + | | this loop is expected to be of type `!` + | expected because of this assignment | = note: expected type `!` found unit type `()` |
