rust: ptr: replace unneeded use of `build_assert`
Alexandre Courbot
reviewerPATCH 1/1 rust: ptr: replace unneeded use of `build_assert`
Since ALIGN is a const parameter, this assertion can be done in const context using the assert! macro.
---
Result of a quick discussion about build_assert with Alice at LPC. :) Thanks for pointing this out.
--- rust/kernel/ptr.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
rust/kernel/ptr.rs +6 -6
@@ -5,8 +5,6 @@use core::mem::align_of;use core::num::NonZero ; -use crate ::build_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
@@ -40,10 +38,12 @@ impl Alignment {/// ``` #[inline(always)] pub const fn new <const ALIGN :usize >() ->Self { -build_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.
---
base-commit: 60c7398bded2e11f0db40a409a241b8be5910ee2
change-id: 20251216-ptr_assert-3d9990798dd7
Best regards,
Signature · 1 line
Alexandre Courbot <[email protected]>
Quoted 6 lines · Alexandre Courbot
Since
ALIGNis a const parameter, this assertion can be done in const context using theassert!macro.Suggested-by Alice Ryhl <[email protected]>Signed-off-by Alexandre Courbot <[email protected]>
Alexandre Courbot
reviewerQuoted 9 lines · Alice Ryhl
Quoted 6 lines · Alexandre Courbot
Since
ALIGNis a const parameter, this assertion can be done in const context using theassert!macro.Suggested-by Alice Ryhl <[email protected]>Signed-off-by Alexandre Courbot <[email protected]>Reviewed-by Alice Ryhl <[email protected]>
Miguel, are you comfortable taking this through the Rust tree for this cycle?
Quoted 2 lines · Alexandre Courbot
rtable taking this through the Rust tree for this
cycle?
That file is maintained in the Rust tree, so it should be taken through the Rust tree barring other reasons, yeah. I didn't start applying yet for -next.
(By the way, we have static_assert! for this -- we should probably discuss if we want to start using const { ... } more instead.)
Cheers,
Miguel
Gary Guo
reviewerQuoted 10 lines · Miguel Ojeda
Quoted 2 lines · Alexandre Courbot
rtable taking this through the Rust tree for this
cycle?That file is maintained in the Rust tree, so it should be taken through the Rust tree barring other reasons, yeah. I didn't start applying yet for -next.
(By the way, we have
static_assert!for this -- we should probably discuss if we want to start usingconst { ... }more instead.)
static_assert! creates an item and thus cannot refer to generic parameters.
Best,
Gary
Quoted 2 lines · Gary Guo
static_assert! creates an item and thus cannot refer to generic parameters.
Ah, right, thanks Gary -- you were the one removing that limitation from const blocks years ago!
Since we are here, I wondered about whether there was progress on allowing top-level inline const so that we could perhaps use that for a macro that can do both (or just use the inline const syntax everywhere, but rustfmt may employ three lines...), i.e. this one I had linked in our usual list:
https://github.com/rust-lang/lang-team/issues/251
But I see someone recently created a tracking issue and even an implementation PR (without commenting in the above issue, which makes it hard to notice). It actually seems close to landing:
https://github.com/rust-lang/rust/issues/149226 https://github.com/rust-lang/rust/pull/149174
There is/was an early experiment on omitting : () on const items as well:
https://github.com/rust-lang/rust/pull/149738
Cheers,
Miguel
Miguel Ojeda
AppliedQuoted 6 lines · Alexandre Courbot
Since
ALIGNis a const parameter, this assertion can be done in const context using theassert!macro.Suggested-by Alice Ryhl <[email protected]>Signed-off-by Alexandre Courbot <[email protected]>
Applied to rust-next -- thanks everyone!
Cheers,
Miguel