Skip to content

Commit fc765aa

Browse files
committed
Avoid using the copy_nonoverlapping wrapper through mem::replace.
1 parent 82297bc commit fc765aa

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

core/src/ptr/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,13 @@ pub const unsafe fn replace<T>(dst: *mut T, mut src: T) -> T {
685685
#[stable(feature = "rust1", since = "1.0.0")]
686686
#[rustc_const_unstable(feature = "const_ptr_read", issue = "80377")]
687687
pub const unsafe fn read<T>(src: *const T) -> T {
688+
// We are calling the intrinsics directly to avoid function calls in the generated code
689+
// as `intrinsics::copy_nonoverlapping` is a wrapper function.
690+
extern "rust-intrinsic" {
691+
#[rustc_const_unstable(feature = "const_intrinsic_copy", issue = "80697")]
692+
fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: usize);
693+
}
694+
688695
let mut tmp = MaybeUninit::<T>::uninit();
689696
// SAFETY: the caller must guarantee that `src` is valid for reads.
690697
// `src` cannot overlap `tmp` because `tmp` was just allocated on

0 commit comments

Comments
 (0)