From 0022baae0042b1f052a08f8a06f0015f1dd8a79f Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Thu, 26 Sep 2019 02:51:30 +0200 Subject: [PATCH] Inline the remaining hir::Arm::top_pats_hack --- src/librustc/hir/mod.rs | 11 ----------- src/librustc_mir/hair/pattern/check_match.rs | 15 +++++++++++---- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs index 01cb5cc9bc10..6bfe6de63f5f 100644 --- a/src/librustc/hir/mod.rs +++ b/src/librustc/hir/mod.rs @@ -1291,17 +1291,6 @@ pub struct Arm { pub body: P, } -impl Arm { - // HACK(or_patterns; Centril | dlrobertson): Remove this and - // correctly handle each case in which this method is used. - pub fn top_pats_hack(&self) -> &[P] { - match &self.pat.kind { - PatKind::Or(pats) => pats, - _ => std::slice::from_ref(&self.pat), - } - } -} - #[derive(RustcEncodable, RustcDecodable, Debug, HashStable)] pub enum Guard { If(P), diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs index b57e57ba3ec9..5b76d24a4d35 100644 --- a/src/librustc_mir/hair/pattern/check_match.rs +++ b/src/librustc_mir/hair/pattern/check_match.rs @@ -140,10 +140,17 @@ fn check_match( let mut have_errors = false; let inlined_arms : Vec<(Vec<_>, _)> = arms.iter().map(|arm| ( - arm.top_pats_hack().iter().map(|pat| { - let mut patcx = PatCtxt::new(self.tcx, - self.param_env.and(self.identity_substs), - self.tables); + // HACK(or_patterns; Centril | dlrobertson): Remove this and + // correctly handle exhaustiveness checking for nested or-patterns. + match &arm.pat.kind { + hir::PatKind::Or(pats) => pats, + _ => std::slice::from_ref(&arm.pat), + }.iter().map(|pat| { + let mut patcx = PatCtxt::new( + self.tcx, + self.param_env.and(self.identity_substs), + self.tables + ); patcx.include_lint_checks(); let pattern = expand_pattern(cx, patcx.lower_pattern(&pat)); if !patcx.errors.is_empty() {