From 422efd793b0d65bd1d1725937a853244af8124c8 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Tue, 27 Mar 2018 17:19:41 +0200 Subject: [PATCH] Use the actual discriminant instead of always choosing the dataful variant --- src/librustc_mir/hair/pattern/mod.rs | 6 ++++-- src/test/run-pass/match-arm-statics.rs | 7 +++++++ 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 7359b1ed1021..798d63531818 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 78a37f518378..ca6ef2e42777 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() {