
Inspired by the zulip conversation about how `Layout` should better enforce `size < isize::MAX as usize`, this uses an N-variant enum on N-bit platforms to require at the validity level that the existing invariant of "must be a power of two" is upheld. This was MIRI can catch it, and means there's a more-specific type for `Layout` to store than just `NonZeroUsize`.
16 lines
612 B
Rust
16 lines
612 B
Rust
// stderr-per-bitwidth
|
|
// ignore-debug (the debug assertions change the error)
|
|
use std::alloc::Layout;
|
|
|
|
// ok
|
|
const LAYOUT_VALID: Layout = unsafe { Layout::from_size_align_unchecked(0x1000, 0x08) };
|
|
|
|
// not ok, since alignment needs to be non-zero.
|
|
const LAYOUT_INVALID_ZERO: Layout = unsafe { Layout::from_size_align_unchecked(0x1000, 0x00) };
|
|
//~^ ERROR it is undefined behavior to use this value
|
|
|
|
// not ok, since alignment needs to be a power of two.
|
|
const LAYOUT_INVALID_THREE: Layout = unsafe { Layout::from_size_align_unchecked(9, 3) };
|
|
//~^ ERROR it is undefined behavior to use this value
|
|
|
|
fn main() {}
|