@@ -584,32 +584,26 @@ pub fn super_relate_consts<R: TypeRelation<'tcx>>(
584
584
// FIXME(const_generics): we should either handle `Scalar::Ptr` or add a comment
585
585
// saying that we're not handling it intentionally.
586
586
587
- (
588
- ConstValue :: Slice { data : alloc_a, start : offset_a, end : end_a } ,
589
- ConstValue :: Slice { data : alloc_b, start : offset_b, end : end_b } ,
590
- ) => {
591
- let len_a = end_a - offset_a;
592
- let len_b = end_b - offset_b;
593
- let a_bytes = alloc_a
594
- . get_bytes (
595
- & tcx,
596
- // invent a pointer, only the offset is relevant anyway
597
- Pointer :: new ( AllocId ( 0 ) , Size :: from_bytes ( offset_a as u64 ) ) ,
598
- Size :: from_bytes ( len_a as u64 ) ,
599
- )
600
- . unwrap_or_else ( |err| bug ! ( "const slice is invalid: {:?}" , err) ) ;
601
-
602
- let b_bytes = alloc_b
603
- . get_bytes (
604
- & tcx,
605
- // invent a pointer, only the offset is relevant anyway
606
- Pointer :: new ( AllocId ( 0 ) , Size :: from_bytes ( offset_b as u64 ) ) ,
607
- Size :: from_bytes ( len_b as u64 ) ,
608
- )
609
- . unwrap_or_else ( |err| bug ! ( "const slice is invalid: {:?}" , err) ) ;
587
+ ( a_val @ ConstValue :: Slice { .. } , b_val @ ConstValue :: Slice { .. } ) => {
588
+ fn get_slice_bytes < ' tcx > ( tcx : TyCtxt < ' tcx > , val : ConstValue < ' tcx > ) -> & ' tcx [ u8 ] {
589
+ if let ConstValue :: Slice { data, start, end } = val {
590
+ let len = end - start;
591
+ data. get_bytes (
592
+ & tcx,
593
+ // invent a pointer, only the offset is relevant anyway
594
+ Pointer :: new ( AllocId ( 0 ) , Size :: from_bytes ( start as u64 ) ) ,
595
+ Size :: from_bytes ( len as u64 ) ,
596
+ ) . unwrap_or_else ( |err| bug ! ( "const slice is invalid: {:?}" , err) )
597
+ } else {
598
+ unreachable ! ( ) ;
599
+ }
600
+ }
601
+
602
+ let a_bytes = get_slice_bytes ( tcx, a_val) ;
603
+ let b_bytes = get_slice_bytes ( tcx, b_val) ;
610
604
if a_bytes == b_bytes {
611
605
Ok ( tcx. mk_const ( ty:: Const {
612
- val : ConstValue :: Slice { data : alloc_a , start : offset_a , end : end_a } ,
606
+ val : a_val ,
613
607
ty : a. ty ,
614
608
} ) )
615
609
} else {
0 commit comments