mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
rust: add const_assert! macro
The macro is a more powerful version of `static_assert!` for use inside
function contexts. This is powered by inline consts, so enable the feature
for old compiler versions that does not have it stably.
While it is possible already to write `const { assert!(...) }`, this
provides a short hand that is more uniform with other assertions. It also
formats nicer with rustfmt where it will not be formatted into multiple
lines.
Two users that would route via the Rust tree are converted.
Reviewed-by: Yury Norov <ynorov@nvidia.com>
Signed-off-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Danilo Krummrich <dakr@kernel.org>
Link: https://patch.msgid.link/20260319121653.2975748-3-gary@kernel.org
[ Rebased. Fixed period typo. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
use core::mem::align_of;
|
||||
use core::num::NonZero;
|
||||
|
||||
use crate::const_assert;
|
||||
|
||||
/// Type representing an alignment, which is always a power of two.
|
||||
///
|
||||
/// It is used to validate that a given value is a valid alignment, and to perform masking and
|
||||
@@ -38,12 +40,10 @@ impl Alignment {
|
||||
/// ```
|
||||
#[inline(always)]
|
||||
pub const fn new<const ALIGN: usize>() -> Self {
|
||||
const {
|
||||
assert!(
|
||||
ALIGN.is_power_of_two(),
|
||||
"Provided alignment is not a power of two."
|
||||
);
|
||||
}
|
||||
const_assert!(
|
||||
ALIGN.is_power_of_two(),
|
||||
"Provided alignment is not a power of two."
|
||||
);
|
||||
|
||||
// INVARIANT: `align` is a power of two.
|
||||
// SAFETY: `align` is a power of two, and thus non-zero.
|
||||
|
||||
Reference in New Issue
Block a user