@@ -655,44 +655,45 @@ impl<'tcx> Constructor<'tcx> {
655
655
. into_iter ( )
656
656
. flat_map ( |pos_ctor| -> SmallVec < [ Constructor < ' tcx > ; 1 ] > {
657
657
// Compute `pos_ctor \ neg_ctor`.
658
- match ( & pos_ctor, neg_ctor) {
659
- ( & FixedLenSlice ( pos_len) , & VarLenSlice ( neg_prefix, neg_suffix) ) => {
660
- let neg_len = neg_prefix + neg_suffix;
661
- if neg_len <= pos_len {
658
+ match pos_ctor {
659
+ FixedLenSlice ( pos_len) => match * neg_ctor {
660
+ FixedLenSlice ( neg_len) if neg_len == pos_len => smallvec ! [ ] ,
661
+ VarLenSlice ( neg_prefix, neg_suffix)
662
+ if neg_prefix + neg_suffix <= pos_len =>
663
+ {
662
664
smallvec ! [ ]
663
- } else {
664
- smallvec ! [ pos_ctor]
665
665
}
666
- }
667
- (
668
- & VarLenSlice ( pos_prefix, pos_suffix) ,
669
- & VarLenSlice ( neg_prefix, neg_suffix) ,
670
- ) => {
671
- let neg_len = neg_prefix + neg_suffix;
672
- let pos_len = pos_prefix + pos_suffix;
673
- if neg_len <= pos_len {
674
- smallvec ! [ ]
675
- } else {
676
- ( pos_len..neg_len) . map ( FixedLenSlice ) . collect ( )
677
- }
678
- }
679
- ( & VarLenSlice ( pos_prefix, pos_suffix) , & FixedLenSlice ( neg_len) ) => {
666
+ _ => smallvec ! [ pos_ctor] ,
667
+ } ,
668
+ VarLenSlice ( pos_prefix, pos_suffix) => {
680
669
let pos_len = pos_prefix + pos_suffix;
681
- if neg_len < pos_len {
682
- smallvec ! [ pos_ctor]
683
- } else {
684
- ( pos_len..neg_len)
685
- . map ( FixedLenSlice )
686
- // We know that `neg_len + 1 >= pos_len >= pos_suffix`.
687
- . chain ( Some ( VarLenSlice (
688
- neg_len + 1 - pos_suffix,
689
- pos_suffix,
690
- ) ) )
691
- . collect ( )
670
+ match * neg_ctor {
671
+ FixedLenSlice ( neg_len) if neg_len >= pos_len => {
672
+ ( pos_len..neg_len)
673
+ . map ( FixedLenSlice )
674
+ // We know that `neg_len + 1 >= pos_len >=
675
+ // pos_suffix`.
676
+ . chain ( Some ( VarLenSlice (
677
+ neg_len + 1 - pos_suffix,
678
+ pos_suffix,
679
+ ) ) )
680
+ . collect ( )
681
+ }
682
+ VarLenSlice ( neg_prefix, neg_suffix) => {
683
+ let neg_len = neg_prefix + neg_suffix;
684
+ if neg_len <= pos_len {
685
+ smallvec ! [ ]
686
+ } else {
687
+ ( pos_len..neg_len) . map ( FixedLenSlice ) . collect ( )
688
+ }
689
+ }
690
+ _ => smallvec ! [ pos_ctor] ,
692
691
}
693
692
}
694
- _ if pos_ctor == * neg_ctor => smallvec ! [ ] ,
695
- _ => smallvec ! [ pos_ctor] ,
693
+ _ => bug ! (
694
+ "unexpected ctor while subtracting from VarLenSlice: {:?}" ,
695
+ pos_ctor
696
+ ) ,
696
697
}
697
698
} )
698
699
. collect ( ) ;
0 commit comments