@@ -16,8 +16,7 @@ use access::{ReadOnly, ReadWrite, Readable, Writable, WriteOnly};
16
16
use core:: {
17
17
fmt,
18
18
marker:: PhantomData ,
19
- ops:: Deref ,
20
- ops:: { DerefMut , Index , IndexMut } ,
19
+ ops:: { Deref , DerefMut , Index , IndexMut } ,
21
20
ptr,
22
21
slice:: SliceIndex ,
23
22
} ;
@@ -514,16 +513,17 @@ where
514
513
where
515
514
T : Copy ,
516
515
{
516
+ let src = self . reference . deref ( ) ;
517
517
assert_eq ! (
518
- self . reference . len( ) ,
518
+ src . len( ) ,
519
519
dst. len( ) ,
520
520
"destination and source slices have different lengths"
521
521
) ;
522
522
unsafe {
523
523
intrinsics:: volatile_copy_nonoverlapping_memory (
524
524
dst. as_mut_ptr ( ) ,
525
- self . reference . as_ptr ( ) ,
526
- self . reference . len ( ) ,
525
+ src . as_ptr ( ) ,
526
+ src . len ( ) ,
527
527
) ;
528
528
}
529
529
}
@@ -569,16 +569,17 @@ where
569
569
T : Copy ,
570
570
R : DerefMut ,
571
571
{
572
+ let dest = self . reference . deref_mut ( ) ;
572
573
assert_eq ! (
573
- self . reference . len( ) ,
574
+ dest . len( ) ,
574
575
src. len( ) ,
575
576
"destination and source slices have different lengths"
576
577
) ;
577
578
unsafe {
578
579
intrinsics:: volatile_copy_nonoverlapping_memory (
579
- self . reference . as_mut_ptr ( ) ,
580
+ dest . as_mut_ptr ( ) ,
580
581
src. as_ptr ( ) ,
581
- self . reference . len ( ) ,
582
+ dest . len ( ) ,
582
583
) ;
583
584
}
584
585
}
@@ -621,22 +622,20 @@ where
621
622
T : Copy ,
622
623
R : DerefMut ,
623
624
{
625
+ let slice = self . reference . deref_mut ( ) ;
624
626
// implementation taken from https://github.com/rust-lang/rust/blob/683d1bcd405727fcc9209f64845bd3b9104878b8/library/core/src/slice/mod.rs#L2726-L2738
625
627
let Range {
626
628
start : src_start,
627
629
end : src_end,
628
- } = range ( src, ..self . reference . len ( ) ) ;
630
+ } = range ( src, ..slice . len ( ) ) ;
629
631
let count = src_end - src_start;
630
- assert ! (
631
- dest <= self . reference. len( ) - count,
632
- "dest is out of bounds"
633
- ) ;
632
+ assert ! ( dest <= slice. len( ) - count, "dest is out of bounds" ) ;
634
633
// SAFETY: the conditions for `volatile_copy_memory` have all been checked above,
635
634
// as have those for `ptr::add`.
636
635
unsafe {
637
636
intrinsics:: volatile_copy_memory (
638
- self . reference . as_mut_ptr ( ) . add ( dest) ,
639
- self . reference . as_ptr ( ) . add ( src_start) ,
637
+ slice . as_mut_ptr ( ) . add ( dest) ,
638
+ slice . as_ptr ( ) . add ( src_start) ,
640
639
count,
641
640
) ;
642
641
}
@@ -672,12 +671,9 @@ where
672
671
where
673
672
R : DerefMut ,
674
673
{
674
+ let dest = self . reference . deref_mut ( ) ;
675
675
unsafe {
676
- intrinsics:: volatile_set_memory (
677
- self . reference . as_mut_ptr ( ) ,
678
- value,
679
- self . reference . len ( ) ,
680
- ) ;
676
+ intrinsics:: volatile_set_memory ( dest. as_mut_ptr ( ) , value, dest. len ( ) ) ;
681
677
}
682
678
}
683
679
}
0 commit comments