Skip to contentSkip to conversation

rust: ptr: replace unneeded use of `build_assert`

PATCH Applied Alexandre Courbot 4 participants 7 messages Dec 16, 2025 – Jan 19 Rust

lore
Share & tools
lore

Alexandre Courbot

author reviewer
#0 lore raw

PATCH 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
index e3893ed04049..5b6a382637fe 100644
@@ -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]>
#3 lore raw
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

reviewer
#4 lore raw
Quoted 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 using const { ... } more instead.)

static_assert! creates an item and thus cannot refer to generic parameters.

Best,
Gary

#5 lore raw
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