From 4990021082b329d628134e42d65680f4e7195b3b Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Fri, 3 Jun 2022 09:18:33 -0400 Subject: [PATCH] test const_copy to make sure bytewise pointer copies are working --- library/core/tests/lib.rs | 1 + library/core/tests/ptr.rs | 40 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/library/core/tests/lib.rs b/library/core/tests/lib.rs index 7e9d7d2710180..9505ec31609f5 100644 --- a/library/core/tests/lib.rs +++ b/library/core/tests/lib.rs @@ -84,6 +84,7 @@ #![feature(const_option)] #![feature(const_option_ext)] #![feature(const_result)] +#![feature(const_intrinsic_copy)] #![feature(integer_atomics)] #![feature(int_roundings)] #![feature(slice_group_by)] diff --git a/library/core/tests/ptr.rs b/library/core/tests/ptr.rs index c5242ad04de84..40b2b49bdbd7d 100644 --- a/library/core/tests/ptr.rs +++ b/library/core/tests/ptr.rs @@ -1,4 +1,5 @@ use core::cell::RefCell; +use core::mem::{self, MaybeUninit}; use core::num::NonZeroUsize; use core::ptr; use core::ptr::*; @@ -781,3 +782,42 @@ fn nonnull_tagged_pointer_with_provenance() { } } } + +#[test] +fn test_const_copy() { + const { + let ptr1 = &1; + let mut ptr2 = &666; + + // Copy ptr1 to ptr2, bytewise. + unsafe { + ptr::copy( + &ptr1 as *const _ as *const MaybeUninit, + &mut ptr2 as *mut _ as *mut MaybeUninit, + mem::size_of::<&i32>(), + ); + } + + // Make sure they still work. + assert!(*ptr1 == 1); + assert!(*ptr2 == 1); + }; + + const { + let ptr1 = &1; + let mut ptr2 = &666; + + // Copy ptr1 to ptr2, bytewise. + unsafe { + ptr::copy_nonoverlapping( + &ptr1 as *const _ as *const MaybeUninit, + &mut ptr2 as *mut _ as *mut MaybeUninit, + mem::size_of::<&i32>(), + ); + } + + // Make sure they still work. + assert!(*ptr1 == 1); + assert!(*ptr2 == 1); + }; +}