@@ -605,8 +605,9 @@ impl<T> [T] {
605
605
// many bytes away from the end of `self`.
606
606
// - Any initialized memory is valid `usize`.
607
607
unsafe {
608
- let pa: * mut T = self . get_unchecked_mut ( i) ;
609
- let pb: * mut T = self . get_unchecked_mut ( ln - i - chunk) ;
608
+ let ptr = self . as_mut_ptr ( ) ;
609
+ let pa = ptr. add ( i) ;
610
+ let pb = ptr. add ( ln - i - chunk) ;
610
611
let va = ptr:: read_unaligned ( pa as * mut usize ) ;
611
612
let vb = ptr:: read_unaligned ( pb as * mut usize ) ;
612
613
ptr:: write_unaligned ( pa as * mut usize , vb. swap_bytes ( ) ) ;
@@ -635,8 +636,9 @@ impl<T> [T] {
635
636
// always respected, ensuring the `pb` pointer can be used
636
637
// safely.
637
638
unsafe {
638
- let pa: * mut T = self . get_unchecked_mut ( i) ;
639
- let pb: * mut T = self . get_unchecked_mut ( ln - i - chunk) ;
639
+ let ptr = self . as_mut_ptr ( ) ;
640
+ let pa = ptr. add ( i) ;
641
+ let pb = ptr. add ( ln - i - chunk) ;
640
642
let va = ptr:: read_unaligned ( pa as * mut u32 ) ;
641
643
let vb = ptr:: read_unaligned ( pb as * mut u32 ) ;
642
644
ptr:: write_unaligned ( pa as * mut u32 , vb. rotate_left ( 16 ) ) ;
@@ -654,8 +656,9 @@ impl<T> [T] {
654
656
// aligned, and can be read from and written to.
655
657
unsafe {
656
658
// Unsafe swap to avoid the bounds check in safe swap.
657
- let pa: * mut T = self . get_unchecked_mut ( i) ;
658
- let pb: * mut T = self . get_unchecked_mut ( ln - i - 1 ) ;
659
+ let ptr = self . as_mut_ptr ( ) ;
660
+ let pa = ptr. add ( i) ;
661
+ let pb = ptr. add ( ln - i - 1 ) ;
659
662
ptr:: swap ( pa, pb) ;
660
663
}
661
664
i += 1 ;
0 commit comments