1 #![feature(core_intrinsics)] // for `volatile_set_memory`
12 const LENGTH: usize = 10;
13 let mut v: [u64; LENGTH] = [0; LENGTH];
15 for idx in 0..LENGTH {
16 assert_eq!(v[idx], 0);
20 let p = v.as_mut_ptr();
21 ::std::ptr::write_bytes(p, 0xab, LENGTH);
24 for idx in 0..LENGTH {
25 assert_eq!(v[idx], 0xabababababababab);
30 let mut w: [Foo; LENGTH] = [Foo { a: 0, b: 0, c: 0 }; LENGTH];
31 for idx in 0..LENGTH {
32 assert_eq!(w[idx].a, 0);
33 assert_eq!(w[idx].b, 0);
34 assert_eq!(w[idx].c, 0);
38 let p = w.as_mut_ptr();
39 ::std::ptr::write_bytes(p, 0xcd, LENGTH);
42 for idx in 0..LENGTH {
43 assert_eq!(w[idx].a, 0xcdcdcdcdcdcdcdcd);
44 assert_eq!(w[idx].b, 0xcdcdcdcdcdcdcdcd);
45 assert_eq!(w[idx].c, 0xcdcdcdcdcdcdcdcd);
49 // `std::intrinsics::volatile_set_memory` should behave identically
51 let mut v: [u64; LENGTH] = [0; LENGTH];
53 for idx in 0..LENGTH {
54 assert_eq!(v[idx], 0);
58 let p = v.as_mut_ptr();
59 ::std::intrinsics::volatile_set_memory(p, 0xab, LENGTH);
62 for idx in 0..LENGTH {
63 assert_eq!(v[idx], 0xabababababababab);
68 let mut w: [Foo; LENGTH] = [Foo { a: 0, b: 0, c: 0 }; LENGTH];
69 for idx in 0..LENGTH {
70 assert_eq!(w[idx].a, 0);
71 assert_eq!(w[idx].b, 0);
72 assert_eq!(w[idx].c, 0);
76 let p = w.as_mut_ptr();
77 ::std::intrinsics::volatile_set_memory(p, 0xcd, LENGTH);
80 for idx in 0..LENGTH {
81 assert_eq!(w[idx].a, 0xcdcdcdcdcdcdcdcd);
82 assert_eq!(w[idx].b, 0xcdcdcdcdcdcdcdcd);
83 assert_eq!(w[idx].c, 0xcdcdcdcdcdcdcdcd);