about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-09-26 02:51:30 +0200
committerMazdak Farrokhzad <twingoow@gmail.com>2019-09-27 19:54:25 +0200
commit0022baae0042b1f052a08f8a06f0015f1dd8a79f (patch)
tree95a2b1c515cc2e8c2fb24a10f571cc1386423174
parenta07b030998d4359b77aa4721855b05f36cef9b78 (diff)
downloadrust-0022baae0042b1f052a08f8a06f0015f1dd8a79f.tar.gz
rust-0022baae0042b1f052a08f8a06f0015f1dd8a79f.zip
Inline the remaining hir::Arm::top_pats_hack
-rw-r--r--src/librustc/hir/mod.rs11
-rw-r--r--src/librustc_mir/hair/pattern/check_match.rs15
2 files changed, 11 insertions, 15 deletions
diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs
index 01cb5cc9bc1..6bfe6de63f5 100644
--- a/src/librustc/hir/mod.rs
+++ b/src/librustc/hir/mod.rs
@@ -1291,17 +1291,6 @@ pub struct Arm {
     pub body: P<Expr>,
 }
 
-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<Pat>] {
-        match &self.pat.kind {
-            PatKind::Or(pats) => pats,
-            _ => std::slice::from_ref(&self.pat),
-        }
-    }
-}
-
 #[derive(RustcEncodable, RustcDecodable, Debug, HashStable)]
 pub enum Guard {
     If(P<Expr>),
diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs
index b57e57ba3ec..5b76d24a4d3 100644
--- a/src/librustc_mir/hair/pattern/check_match.rs
+++ b/src/librustc_mir/hair/pattern/check_match.rs
@@ -140,10 +140,17 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
             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() {