@@ -68,19 +68,14 @@ impl Layout {
|
68 | 68 | pub const fn from_size_align(size: usize, align: usize) -> Result<Self, LayoutError> { |
69 | 69 | if Layout::is_size_align_valid(size, align) { |
70 | 70 | // SAFETY: Layout::is_size_align_valid checks the preconditions for this call. |
71 | | -let layout = unsafe { Layout::from_size_align_unchecked(size, align) }; |
72 | | -Ok(layout) |
| 71 | +unsafe { Ok(Layout { size, align: mem::transmute(align) }) } |
73 | 72 | } else { |
74 | 73 | Err(LayoutError) |
75 | 74 | } |
76 | 75 | } |
77 | 76 | |
78 | 77 | const fn is_size_align_valid(size: usize, align: usize) -> bool { |
79 | | -if !align.is_power_of_two() { |
80 | | -return false; |
81 | | -} |
82 | | -// SAFETY: Precondition checked directly above. |
83 | | -let align = unsafe { Alignment::new_unchecked(align) }; |
| 78 | +let Some(align) = Alignment::new(align) else { return false }; |
84 | 79 | if size > Self::max_size_for_align(align) { |
85 | 80 | return false; |
86 | 81 | } |
@@ -139,7 +134,7 @@ impl Layout {
|
139 | 134 | ) => Layout::is_size_align_valid(size, align) |
140 | 135 | ); |
141 | 136 | // SAFETY: the caller is required to uphold the preconditions. |
142 | | -unsafe { Layout { size, align: Alignment::new_unchecked(align) } } |
| 137 | +unsafe { Layout { size, align: mem::transmute(align) } } |
143 | 138 | } |
144 | 139 | |
145 | 140 | /// The minimum size in bytes for a memory block of this layout. |
|