From 7f5dc0f6090eaad75fadf75b1cf2449294a15f52 Mon Sep 17 00:00:00 2001 From: woppopo Date: Sun, 12 Dec 2021 14:02:53 +0900 Subject: [PATCH] Make `(*mut T)::write_bytes` `const` --- library/core/src/ptr/mut_ptr.rs | 3 ++- library/core/tests/ptr.rs | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/library/core/src/ptr/mut_ptr.rs b/library/core/src/ptr/mut_ptr.rs index 5d4e37641ee84..c48f4f9f2090d 100644 --- a/library/core/src/ptr/mut_ptr.rs +++ b/library/core/src/ptr/mut_ptr.rs @@ -1069,8 +1069,9 @@ impl *mut T { /// /// [`ptr::write_bytes`]: crate::ptr::write_bytes() #[stable(feature = "pointer_methods", since = "1.26.0")] + #[rustc_const_unstable(feature = "const_ptr_write", issue = "86302")] #[inline(always)] - pub unsafe fn write_bytes(self, val: u8, count: usize) + pub const unsafe fn write_bytes(self, val: u8, count: usize) where T: Sized, { diff --git a/library/core/tests/ptr.rs b/library/core/tests/ptr.rs index 11af8090c3a4f..b9c0d75b702e5 100644 --- a/library/core/tests/ptr.rs +++ b/library/core/tests/ptr.rs @@ -250,6 +250,21 @@ fn test_set_memory() { assert!(xs == [5u8; 20]); } +#[test] +#[cfg(not(bootstrap))] +fn test_set_memory_const() { + const XS: [u8; 20] = { + let mut xs = [0u8; 20]; + let ptr = xs.as_mut_ptr(); + unsafe { + ptr.write_bytes(5u8, xs.len()); + } + xs + }; + + assert!(XS == [5u8; 20]); +} + #[test] fn test_unsized_nonnull() { let xs: &[i32] = &[1, 2, 3];