Skip to content

Commit

Permalink
Auto merge of #126556 - saethlin:layout-precondition, r=<try>
Browse files Browse the repository at this point in the history
Add a precondition check for Layout::from_size_align_unchecked

Ran into this while looking into rust-lang/miri#3679. This is of course not the cause of the ICE, but the reproducer doesn't encounter a precondition check and it ought to.
  • Loading branch information
bors committed Jun 16, 2024
2 parents 55cac26 + 289a208 commit 5489321
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions library/core/src/alloc/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
// collections, resulting in having to optimize down excess IR multiple times.
// Your performance intuition is useless. Run perf.

use crate::assert_unsafe_precondition;
use crate::cmp;
use crate::error::Error;
use crate::fmt;
Expand Down Expand Up @@ -118,6 +119,15 @@ impl Layout {
#[inline]
#[rustc_allow_const_fn_unstable(ptr_alignment_type)]
pub const unsafe fn from_size_align_unchecked(size: usize, align: usize) -> Self {
assert_unsafe_precondition!(
check_library_ub,
"Layout::from_size_align_unchecked requires that align is a power of 2 \
and the rounded-up allocation size does not exceed isize::MAX",
(
size: usize = size,
align: usize = align,
) => Layout::from_size_align(size, align).is_ok()
);
// SAFETY: the caller is required to uphold the preconditions.
unsafe { Layout { size, align: Alignment::new_unchecked(align) } }
}
Expand Down

0 comments on commit 5489321

Please sign in to comment.