1 // revisions: mirunsafeck thirunsafeck
2 // [thirunsafeck]compile-flags: -Z thir-unsafeck
4 #![feature(rustc_attrs)]
8 #[rustc_layout_scalar_valid_range_start(1)]
10 pub(crate) struct NonZero<T>(pub(crate) T);
13 const fn foo() -> NonZero<Cell<u32>> {
14 let mut x = unsafe { NonZero(Cell::new(1)) };
15 let y = &x.0; //~ ERROR the borrowed element may contain interior mutability
16 //~^ ERROR borrow of layout constrained field with interior mutability
17 unsafe { NonZero(Cell::new(1)) }
20 const fn bar() -> NonZero<Cell<u32>> {
21 let mut x = unsafe { NonZero(Cell::new(1)) };
22 let y = unsafe { &x.0 }; //~ ERROR the borrowed element may contain interior mutability
23 unsafe { NonZero(Cell::new(1)) }