From 909ec370286b193f67e738e7b9d6437cf32c014c Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sun, 3 Nov 2019 21:22:14 +0000 Subject: [PATCH] Simpler code path for subtracting from FixedLenSlice --- src/librustc_mir/hair/pattern/_match.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs index d0597817d32..31984daa5df 100644 --- a/src/librustc_mir/hair/pattern/_match.rs +++ b/src/librustc_mir/hair/pattern/_match.rs @@ -672,7 +672,15 @@ impl<'tcx> Constructor<'tcx> { vec![self.clone()] } } - FixedLenSlice(_) | VarLenSlice(_) => { + FixedLenSlice(self_len) => { + let overlaps = |c: &Constructor<'_>| match c { + FixedLenSlice(other_len) => other_len == self_len, + VarLenSlice(other_len) => other_len <= self_len, + _ => false, + }; + if other_ctors.iter().any(overlaps) { vec![] } else { vec![self.clone()] } + } + VarLenSlice(_) => { let mut remaining_ctors = if let VarLenSlice(len) = self { (*len..pcx.max_slice_length + 1).map(FixedLenSlice).collect() } else {