From e47d631ca0eebb2e5b7f0d40230f78ba7b92592e Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sat, 9 Nov 2019 21:42:02 +0000 Subject: [PATCH] Malformed range patterns can't happen thanks to E0030 --- src/librustc_mir/hair/pattern/_match.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs index ee5af9515224..e3b0c5a5c69a 100644 --- a/src/librustc_mir/hair/pattern/_match.rs +++ b/src/librustc_mir/hair/pattern/_match.rs @@ -1118,8 +1118,7 @@ fn all_constructors<'a, 'tcx>( debug!("all_constructors({:?})", pcx.ty); let make_range = |start, end| { IntRange( - // `unwrap()` is ok because we know the type is an integer and the range is - // well-formed. + // `unwrap()` is ok because we know the type is an integer. IntRange::from_range(cx.tcx, start, end, pcx.ty, &RangeEnd::Included, pcx.span) .unwrap(), ) @@ -1318,13 +1317,12 @@ impl<'tcx> IntRange<'tcx> { // which makes the interval arithmetic simpler. let bias = IntRange::signed_bias(tcx, ty); let (lo, hi) = (lo ^ bias, hi ^ bias); - // Make sure the interval is well-formed. - if lo > hi || lo == hi && *end == RangeEnd::Excluded { - None - } else { - let offset = (*end == RangeEnd::Excluded) as u128; - Some(IntRange { range: lo..=(hi - offset), ty, span }) + let offset = (*end == RangeEnd::Excluded) as u128; + if lo > hi || (lo == hi && *end == RangeEnd::Excluded) { + // This hould have been caught earlier by E0030 + bug!("malformed range pattern: {}..={}", lo, (hi - offset)); } + Some(IntRange { range: lo..=(hi - offset), ty, span }) } else { None }