diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-09-26 02:51:30 +0200 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-09-27 19:54:25 +0200 |
| commit | 0022baae0042b1f052a08f8a06f0015f1dd8a79f (patch) | |
| tree | 95a2b1c515cc2e8c2fb24a10f571cc1386423174 | |
| parent | a07b030998d4359b77aa4721855b05f36cef9b78 (diff) | |
| download | rust-0022baae0042b1f052a08f8a06f0015f1dd8a79f.tar.gz rust-0022baae0042b1f052a08f8a06f0015f1dd8a79f.zip | |
Inline the remaining hir::Arm::top_pats_hack
| -rw-r--r-- | src/librustc/hir/mod.rs | 11 | ||||
| -rw-r--r-- | 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 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() { |
