26 lines
612 B
Rust
26 lines
612 B
Rust
|
// 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() {}
|