about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc_mir/hair/pattern/_match.rs42
1 files changed, 10 insertions, 32 deletions
diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs
index 065fbeda153..26df0666340 100644
--- a/src/librustc_mir/hair/pattern/_match.rs
+++ b/src/librustc_mir/hair/pattern/_match.rs
@@ -351,38 +351,15 @@ impl<'tcx> Witness<'tcx> {
         ty: Ty<'tcx>)
         -> Self
     {
-        // If we've been trying to exhaustively match over the domain of values for a type,
-        // then we can construct witnesses directly corresponding to the missing ranges of values,
-        // giving far more precise diagnostics.
-        // `ConstantValue` and `ConstantRange` only occur in practice when doing exhaustive value
-        // matching (exhaustive_integer_patterns).
-        match ctor {
-            ConstantValue(value) => {
-                Witness(vec![Pattern {
-                    ty,
-                    span: DUMMY_SP,
-                    kind: box PatternKind::Constant { value },
-                }])
-            }
-            ConstantRange(lo, hi, end) => {
-                Witness(vec![Pattern {
-                    ty,
-                    span: DUMMY_SP,
-                    kind: box PatternKind::Range { lo, hi, end: *end },
-                }])
+        let sub_pattern_tys = constructor_sub_pattern_tys(cx, ctor, ty);
+        self.0.extend(sub_pattern_tys.into_iter().map(|ty| {
+            Pattern {
+                ty,
+                span: DUMMY_SP,
+                kind: box PatternKind::Wild,
             }
-            _ => {
-                let sub_pattern_tys = constructor_sub_pattern_tys(cx, ctor, ty);
-                self.0.extend(sub_pattern_tys.into_iter().map(|ty| {
-                    Pattern {
-                        ty,
-                        span: DUMMY_SP,
-                        kind: box PatternKind::Wild,
-                    }
-                }));
-                self.apply_constructor(cx, ctor, ty)
-            }
-        }
+        }));
+        self.apply_constructor(cx, ctor, ty)
     }
 
 
@@ -409,7 +386,7 @@ impl<'tcx> Witness<'tcx> {
         let arity = constructor_arity(cx, ctor, ty);
         let pat = {
             let len = self.0.len() as u64;
-            let mut pats = self.0.drain((len-arity) as usize..).rev();
+            let mut pats = self.0.drain((len - arity) as usize..).rev();
 
             match ty.sty {
                 ty::TyAdt(..) |
@@ -452,6 +429,7 @@ impl<'tcx> Witness<'tcx> {
                 _ => {
                     match *ctor {
                         ConstantValue(value) => PatternKind::Constant { value },
+                        ConstantRange(lo, hi, end) => PatternKind::Range { lo, hi, end },
                         _ => PatternKind::Wild,
                     }
                 }