//! This test checks the one code path that does not go through //! the regular CTFE memory access (as an optimization). We forgot //! to duplicate the static item self-initialization check, allowing //! reading from the uninitialized static memory before it was //! initialized at the end of the static initializer. //! //! https://github.com/rust-lang/rust/issues/142532 use std::mem::MaybeUninit; pub static X: (i32, MaybeUninit) = (1, foo(&X.0, 1)); //~^ ERROR: encountered static that tried to access itself during initialization pub static Y: (i32, MaybeUninit) = (1, foo(&Y.0, 0)); //~^ ERROR: encountered static that tried to access itself during initialization const fn foo(x: &i32, num: usize) -> MaybeUninit { let mut temp = MaybeUninit::::uninit(); unsafe { std::ptr::copy(x, temp.as_mut_ptr(), num); } temp } fn main() {}