@@ -605,8 +605,9 @@ impl<T> [T] {
605605 // many bytes away from the end of `self`.
606606 // - Any initialized memory is valid `usize`.
607607 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) ;
610611 let va = ptr:: read_unaligned ( pa as * mut usize ) ;
611612 let vb = ptr:: read_unaligned ( pb as * mut usize ) ;
612613 ptr:: write_unaligned ( pa as * mut usize , vb. swap_bytes ( ) ) ;
@@ -635,8 +636,9 @@ impl<T> [T] {
635636 // always respected, ensuring the `pb` pointer can be used
636637 // safely.
637638 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) ;
640642 let va = ptr:: read_unaligned ( pa as * mut u32 ) ;
641643 let vb = ptr:: read_unaligned ( pb as * mut u32 ) ;
642644 ptr:: write_unaligned ( pa as * mut u32 , vb. rotate_left ( 16 ) ) ;
@@ -654,8 +656,9 @@ impl<T> [T] {
654656 // aligned, and can be read from and written to.
655657 unsafe {
656658 // 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 ) ;
659662 ptr:: swap ( pa, pb) ;
660663 }
661664 i += 1 ;
0 commit comments