about summary refs log tree commit diff
diff options
context:
space:
mode:
authorwoppopo <woppopo@protonmail.com>2021-12-12 14:02:53 +0900
committerwoppopo <woppopo@protonmail.com>2021-12-12 14:02:53 +0900
commit7f5dc0f6090eaad75fadf75b1cf2449294a15f52 (patch)
treedf1ccdca4b4d780823d37698f0112e453959aaa5
parente70e4d499dd9dd1f7ff3717b9d91ca5dd0757143 (diff)
downloadrust-7f5dc0f6090eaad75fadf75b1cf2449294a15f52.tar.gz
rust-7f5dc0f6090eaad75fadf75b1cf2449294a15f52.zip
Make `(*mut T)::write_bytes` `const`
-rw-r--r--library/core/src/ptr/mut_ptr.rs3
-rw-r--r--library/core/tests/ptr.rs15
2 files changed, 17 insertions, 1 deletions
diff --git a/library/core/src/ptr/mut_ptr.rs b/library/core/src/ptr/mut_ptr.rs
index 5d4e37641ee..c48f4f9f209 100644
--- a/library/core/src/ptr/mut_ptr.rs
+++ b/library/core/src/ptr/mut_ptr.rs
@@ -1069,8 +1069,9 @@ impl<T: ?Sized> *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 11af8090c3a..b9c0d75b702 100644
--- a/library/core/tests/ptr.rs
+++ b/library/core/tests/ptr.rs
@@ -251,6 +251,21 @@ fn test_set_memory() {
 }
 
 #[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];
     let ptr = unsafe { NonNull::new_unchecked(xs as *const [i32] as *mut [i32]) };