26 lines
834 B
Rust
26 lines
834 B
Rust
|
//@ run-fail
|
||
|
//@ compile-flags: -Copt-level=3 -Cdebug-assertions=no -Zub-checks=yes
|
||
|
//@ error-pattern: unsafe precondition(s) violated: ptr::copy_nonoverlapping requires
|
||
|
//@ revisions: null_src null_dst misaligned_src misaligned_dst overlapping
|
||
|
|
||
|
use std::ptr;
|
||
|
|
||
|
fn main() {
|
||
|
let src = [0u16; 3];
|
||
|
let mut dst = [0u16; 3];
|
||
|
let src = src.as_ptr();
|
||
|
let dst = dst.as_mut_ptr();
|
||
|
unsafe {
|
||
|
#[cfg(null_src)]
|
||
|
ptr::copy_nonoverlapping(ptr::null(), dst, 1);
|
||
|
#[cfg(null_dst)]
|
||
|
ptr::copy_nonoverlapping(src, ptr::null_mut(), 1);
|
||
|
#[cfg(misaligned_src)]
|
||
|
ptr::copy_nonoverlapping(src.byte_add(1), dst, 1);
|
||
|
#[cfg(misaligned_dst)]
|
||
|
ptr::copy_nonoverlapping(src, dst.byte_add(1), 1);
|
||
|
#[cfg(overlapping)]
|
||
|
ptr::copy_nonoverlapping(dst, dst.add(1), 2);
|
||
|
}
|
||
|
}
|