//@compile-flags: -Zmiri-permissive-provenance #[derive(PartialEq, Debug)] struct A; fn zst_ret() -> A { A } fn use_zst() -> A { let a = A; a } fn main() { // Not using the () type here, as writes of that type do not even have MIR generated. // Also not assigning directly as that's array initialization, not assignment. let zst_val = [1u8; 0]; assert_eq!(zst_ret(), A); assert_eq!(use_zst(), A); let x = 42 as *mut [u8; 0]; // Reading and writing is ok. unsafe { *x = zst_val; } unsafe { let _y = *x; } }