//! Test that we properly error when there is a pointer fragment in the final value. //@ ignore-test: disabled due to use std::{mem::{self, MaybeUninit}, ptr}; type Byte = MaybeUninit; const unsafe fn memcpy(dst: *mut Byte, src: *const Byte, n: usize) { let mut i = 0; while i < n { dst.add(i).write(src.add(i).read()); i += 1; } } const MEMCPY_RET: MaybeUninit<*const i32> = unsafe { //~ERROR: partial pointer in final value let ptr = &42; let mut ptr2 = MaybeUninit::new(ptr::null::()); memcpy(&mut ptr2 as *mut _ as *mut _, &ptr as *const _ as *const _, mem::size_of::<&i32>() / 2); // Return in a MaybeUninit so it does not get treated as a scalar. ptr2 }; fn main() { assert_eq!(unsafe { MEMCPY_RET.assume_init().read() }, 42); }