| @@ -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. |