about summary refs log tree commit diff
diff options
context:
space:
mode:
authorOliver Schneider <git-no-reply-9879165716479413131@oli-obk.de>2018-03-27 17:19:41 +0200
committerOliver Schneider <git-no-reply-9879165716479413131@oli-obk.de>2018-03-27 17:19:41 +0200
commit422efd793b0d65bd1d1725937a853244af8124c8 (patch)
tree0168b7ef9134a608d97e4fb087bef5fb570fc803
parent6b3202a2bfd33f435d3266f2583c0f5d3356251d (diff)
downloadrust-422efd793b0d65bd1d1725937a853244af8124c8.tar.gz
rust-422efd793b0d65bd1d1725937a853244af8124c8.zip
Use the actual discriminant instead of always choosing the dataful variant
-rw-r--r--src/librustc_mir/hair/pattern/mod.rs6
-rw-r--r--src/test/run-pass/match-arm-statics.rs7
2 files changed, 11 insertions, 2 deletions
diff --git a/src/librustc_mir/hair/pattern/mod.rs b/src/librustc_mir/hair/pattern/mod.rs
index 7359b1ed102..798d6353181 100644
--- a/src/librustc_mir/hair/pattern/mod.rs
+++ b/src/librustc_mir/hair/pattern/mod.rs
@@ -878,8 +878,10 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> {
                                             );
                                     })
                             }
-                            ty::layout::Variants::NicheFilling { dataful_variant, .. } =>
-                                dataful_variant,
+                            ty::layout::Variants::NicheFilling { .. } => {
+                                assert_eq!(discr_val as usize as u128, discr_val);
+                                discr_val as usize
+                            },
                         };
                         let subpatterns = adt_subpatterns(
                             adt_def.variants[variant_index].fields.len(),
diff --git a/src/test/run-pass/match-arm-statics.rs b/src/test/run-pass/match-arm-statics.rs
index 78a37f51837..ca6ef2e4277 100644
--- a/src/test/run-pass/match-arm-statics.rs
+++ b/src/test/run-pass/match-arm-statics.rs
@@ -94,6 +94,13 @@ fn issue_14576() {
     const F : C = C::D;
 
     assert_eq!(match C::D { F => 1, _ => 2, }, 1);
+
+    // test gaps
+    #[derive(PartialEq, Eq)]
+    enum G { H = 3, I = 5 }
+    const K : G = G::I;
+
+    assert_eq!(match G::I { K => 1, _ => 2, }, 1);
 }
 
 fn issue_13731() {