diff options
| author | Oliver Schneider <git-no-reply-9879165716479413131@oli-obk.de> | 2018-03-27 17:19:41 +0200 |
|---|---|---|
| committer | Oliver Schneider <git-no-reply-9879165716479413131@oli-obk.de> | 2018-03-27 17:19:41 +0200 |
| commit | 422efd793b0d65bd1d1725937a853244af8124c8 (patch) | |
| tree | 0168b7ef9134a608d97e4fb087bef5fb570fc803 | |
| parent | 6b3202a2bfd33f435d3266f2583c0f5d3356251d (diff) | |
| download | rust-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.rs | 6 | ||||
| -rw-r--r-- | 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 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() { |
