diff --git a/tests/run-pass/write-bytes.rs b/tests/run-pass/write-bytes.rs index 1df23ab1feac..7c9a38fca696 100644 --- a/tests/run-pass/write-bytes.rs +++ b/tests/run-pass/write-bytes.rs @@ -1,3 +1,11 @@ +#[repr(C)] +#[derive(Copy, Clone)] +struct Foo { + a: u64, + b: u64, + c: u64, +} + fn main() { const LENGTH: usize = 10; let mut v: [u64; LENGTH] = [0; LENGTH]; @@ -14,4 +22,24 @@ fn main() { 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::ptr::write_bytes(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); + } }