//@ run-pass #![feature(core_intrinsics)] use std::intrinsics::{ volatile_copy_memory, volatile_store, volatile_load, volatile_copy_nonoverlapping_memory, volatile_set_memory }; // // This test ensures that volatile intrinsics can be specialised with // zero-sized types and, in case of copy/set functions, can accept // number of elements equal to zero. // fn main () { let mut dst_pair = (1, 2); let src_pair = (3, 4); let mut dst_empty = (); let src_empty = (); const COUNT_0: usize = 0; const COUNT_100: usize = 100; unsafe { volatile_copy_memory(&mut dst_pair, &dst_pair, COUNT_0); volatile_copy_nonoverlapping_memory(&mut dst_pair, &src_pair, 0); volatile_copy_memory(&mut dst_empty, &dst_empty, 100); volatile_copy_nonoverlapping_memory(&mut dst_empty, &src_empty, COUNT_100); volatile_set_memory(&mut dst_empty, 0, COUNT_100); volatile_set_memory(&mut dst_pair, 0, COUNT_0); volatile_store(&mut dst_empty, ()); volatile_store(&mut dst_empty, src_empty); volatile_load(&src_empty); } }