Skip to content

Commit 1240a31

Browse files
committed
typeck: remove redundant diverges code
1 parent d47673d commit 1240a31

File tree

1 file changed

+8
-23
lines changed

1 file changed

+8
-23
lines changed

src/librustc_typeck/check/_match.rs

+8-23
Original file line numberDiff line numberDiff line change
@@ -53,25 +53,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
5353
// Otherwise, we have to union together the types that the arms produce and so forth.
5454
let scrut_diverges = self.diverges.replace(Diverges::Maybe);
5555

56-
// rust-lang/rust#55810: Typecheck patterns first (via eager
57-
// collection into `Vec`), so we get types for all bindings.
58-
let all_arm_pats_diverge: Vec<_> = arms
59-
.iter()
60-
.map(|arm| {
61-
let mut all_pats_diverge = Diverges::WarnedAlways;
62-
self.diverges.set(Diverges::Maybe);
63-
self.check_pat_top(&arm.pat, scrut_ty, Some(scrut.span), true);
64-
all_pats_diverge &= self.diverges.get();
65-
66-
// As discussed with @eddyb, this is for disabling unreachable_code
67-
// warnings on patterns (they're now subsumed by unreachable_patterns
68-
// warnings).
69-
match all_pats_diverge {
70-
Diverges::Maybe => Diverges::Maybe,
71-
Diverges::Always { .. } | Diverges::WarnedAlways => Diverges::WarnedAlways,
72-
}
73-
})
74-
.collect();
56+
// #55810: Type check patterns first so we get types for all bindings.
57+
for arm in arms {
58+
self.check_pat_top(&arm.pat, scrut_ty, Some(scrut.span), true);
59+
}
7560

7661
// Now typecheck the blocks.
7762
//
@@ -102,19 +87,19 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
10287
CoerceMany::with_coercion_sites(coerce_first, arms)
10388
};
10489

105-
let mut other_arms = vec![]; // used only for diagnostics
90+
let mut other_arms = vec![]; // Used only for diagnostics.
10691
let mut prior_arm_ty = None;
107-
for (i, (arm, pats_diverge)) in arms.iter().zip(all_arm_pats_diverge).enumerate() {
92+
for (i, arm) in arms.iter().enumerate() {
10893
if let Some(g) = &arm.guard {
109-
self.diverges.set(pats_diverge);
94+
self.diverges.set(Diverges::Maybe);
11095
match g {
11196
hir::Guard::If(e) => {
11297
self.check_expr_has_type_or_error(e, tcx.types.bool, |_| {})
11398
}
11499
};
115100
}
116101

117-
self.diverges.set(pats_diverge);
102+
self.diverges.set(Diverges::Maybe);
118103
let arm_ty = if source_if
119104
&& if_no_else
120105
&& i != 0

0 commit comments

Comments
 (0)