@@ -707,7 +707,7 @@ pub fn is_useful<'p, 'a: 'p, 'tcx: 'a>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
707
707
let mut ranges: Vec < _ > =
708
708
ranges. into_iter ( ) . filter_map ( |r| to_inc_range_pair ( cx. tcx , & r) ) . collect ( ) ;
709
709
while let Some ( ( lo2, hi2) ) = ranges. pop ( ) {
710
- eprintln ! ( "{:?} {:?}" , ( lo2, hi2) , ( lo1, hi1) ) ;
710
+ // eprintln!("{:?} {:?}", (lo2, hi2), (lo1, hi1));
711
711
if lo1 <= lo2 && hi1 >= hi2 {
712
712
if _deb { eprintln ! ( "case 1" ) ; }
713
713
ctor_was_useful = true ;
@@ -793,6 +793,17 @@ pub fn is_useful<'p, 'a: 'p, 'tcx: 'a>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
793
793
missing_ctors. extend ( cur) ;
794
794
}
795
795
796
+ // if _ranged {
797
+ // missing_ctors = missing_ctors.into_iter().map(|ctor| {
798
+ // match ctor {
799
+ // ConstantRange(lo, hi, RangeEnd::Included) if lo == hi => {
800
+ // ConstantValue(lo)
801
+ // }
802
+ // _ => ctor,
803
+ // }
804
+ // }).collect();
805
+ // }
806
+
796
807
// let missing_ctors: Vec<Constructor> = all_ctors.iter().filter(|c| {
797
808
// !used_ctors.contains(*c)
798
809
// }).cloned().collect();
@@ -916,11 +927,33 @@ pub fn is_useful<'p, 'a: 'p, 'tcx: 'a>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
916
927
} ) . collect ( )
917
928
} else {
918
929
if _deb { eprintln ! ( "ABC 5" ) ; }
919
- pats. into_iter ( ) . flat_map ( |witness| {
920
- missing_ctors. iter ( ) . map ( move |ctor| {
921
- witness. clone ( ) . push_wild_constructor ( cx, ctor, pcx. ty )
922
- } )
923
- } ) . collect ( )
930
+ if _ranged {
931
+ missing_ctors. into_iter ( ) . map ( |ctor| {
932
+ match ctor {
933
+ ConstantRange ( lo, hi, _) if lo == hi => {
934
+ Witness ( vec ! [ Pattern {
935
+ ty: pcx. ty,
936
+ span: DUMMY_SP ,
937
+ kind: box PatternKind :: Constant { value: lo } ,
938
+ } ] )
939
+ }
940
+ ConstantRange ( lo, hi, end) => {
941
+ Witness ( vec ! [ Pattern {
942
+ ty: pcx. ty,
943
+ span: DUMMY_SP ,
944
+ kind: box PatternKind :: Range { lo, hi, end } ,
945
+ } ] )
946
+ } ,
947
+ _ => bug ! ( "this shouldn't be happening" ) ,
948
+ }
949
+ } ) . collect ( )
950
+ } else {
951
+ pats. into_iter ( ) . flat_map ( |witness| {
952
+ missing_ctors. iter ( ) . map ( move |ctor| {
953
+ witness. clone ( ) . push_wild_constructor ( cx, ctor, pcx. ty )
954
+ } )
955
+ } ) . collect ( )
956
+ }
924
957
} ;
925
958
UsefulWithWitness ( new_witnesses)
926
959
}
0 commit comments