| // revisions: mirunsafeck thirunsafeck |
| // [thirunsafeck]compile-flags: -Z thir-unsafeck |
| |
| #![feature(rustc_attrs)] |
| #![allow(unused,dead_code)] |
| |
| fn nested_field() { |
| #[rustc_layout_scalar_valid_range_start(1)] |
| struct NonZero<T>(T); |
| |
| let mut foo = unsafe { NonZero((1,)) }; |
| foo.0.0 = 0; |
| //~^ ERROR: mutation of layout constrained field is unsafe |
| } |
| |
| fn block() { |
| #[rustc_layout_scalar_valid_range_start(1)] |
| struct NonZero<T>(T); |
| |
| let mut foo = unsafe { NonZero((1,)) }; |
| { foo.0 }.0 = 0; |
| // ^ not unsafe because the result of the block expression is a new place |
| } |
| |
| fn main() {} |