Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/infer/expr.rs')
-rw-r--r--crates/hir-ty/src/infer/expr.rs5
1 files changed, 5 insertions, 0 deletions
diff --git a/crates/hir-ty/src/infer/expr.rs b/crates/hir-ty/src/infer/expr.rs
index f56108b26c..3d2e091a0f 100644
--- a/crates/hir-ty/src/infer/expr.rs
+++ b/crates/hir-ty/src/infer/expr.rs
@@ -375,6 +375,7 @@ impl<'a> InferenceContext<'a> {
let matchee_diverges = self.diverges;
let mut all_arms_diverge = Diverges::Always;
+ let mut diverging_arms = Vec::new();
for arm in arms.iter() {
self.diverges = Diverges::Maybe;
@@ -387,11 +388,15 @@ impl<'a> InferenceContext<'a> {
}
let arm_ty = self.infer_expr_inner(arm.expr, &expected);
+ if self.diverges.is_always() {
+ diverging_arms.push(arm.expr);
+ }
all_arms_diverge &= self.diverges;
coerce.coerce(self, Some(arm.expr), &arm_ty);
}
self.diverges = matchee_diverges | all_arms_diverge;
+ self.result.diverging_arms.insert(tgt_expr, diverging_arms);
coerce.complete()
}