//! This mixes fragments from different pointers to the same allocarion, in a way //! that we should not accept. See . static A: u8 = 123; const HALF_PTR: usize = std::mem::size_of::<*const ()>() / 2; const fn mix_ptr() -> *const u8 { unsafe { let x: *const u8 = &raw const A; let mut y = x.wrapping_add(usize::MAX / 4); core::ptr::copy_nonoverlapping( (&raw const x).cast::(), (&raw mut y).cast::(), HALF_PTR, ); y } } const APTR: *const u8 = mix_ptr(); //~ERROR: unable to read parts of a pointer fn main() { let a = APTR; println!("{a:p}"); let b = mix_ptr(); println!("{b:p}"); assert_eq!(a, b); }