From 083e5e604c304d8743a942ef33def704fa4b6012 Mon Sep 17 00:00:00 2001 From: niluxv Date: Mon, 23 Aug 2021 12:42:13 +0200 Subject: [PATCH] Add test for `volatile_set_memory` --- tests/run-pass/write-bytes.rs | 40 +++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tests/run-pass/write-bytes.rs b/tests/run-pass/write-bytes.rs index 7c9a38fca69..b2050c5393e 100644 --- a/tests/run-pass/write-bytes.rs +++ b/tests/run-pass/write-bytes.rs @@ -1,3 +1,5 @@ +#![feature(core_intrinsics)] // for `volatile_set_memory` + #[repr(C)] #[derive(Copy, Clone)] struct Foo { @@ -42,4 +44,42 @@ fn main() { assert_eq!(w[idx].b, 0xcdcdcdcdcdcdcdcd); assert_eq!(w[idx].c, 0xcdcdcdcdcdcdcdcd); } + + // ----- + // `std::intrinsics::volatile_set_memory` should behave identically + + let mut v: [u64; LENGTH] = [0; LENGTH]; + + for idx in 0..LENGTH { + assert_eq!(v[idx], 0); + } + + unsafe { + let p = v.as_mut_ptr(); + ::std::intrinsics::volatile_set_memory(p, 0xab, LENGTH); + } + + for idx in 0..LENGTH { + assert_eq!(v[idx], 0xabababababababab); + } + + // ----- + + let mut w: [Foo; LENGTH] = [Foo { a: 0, b: 0, c: 0 }; LENGTH]; + for idx in 0..LENGTH { + assert_eq!(w[idx].a, 0); + assert_eq!(w[idx].b, 0); + assert_eq!(w[idx].c, 0); + } + + unsafe { + let p = w.as_mut_ptr(); + ::std::intrinsics::volatile_set_memory(p, 0xcd, LENGTH); + } + + for idx in 0..LENGTH { + assert_eq!(w[idx].a, 0xcdcdcdcdcdcdcdcd); + assert_eq!(w[idx].b, 0xcdcdcdcdcdcdcdcd); + assert_eq!(w[idx].c, 0xcdcdcdcdcdcdcdcd); + } } -- 2.44.0