[PATCH] rust: ptr: replace unneeded use of `build_assert`

Alexandre Courbot posted 1 patch 1 month, 3 weeks ago
rust/kernel/ptr.rs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
[PATCH] rust: ptr: replace unneeded use of `build_assert`
Posted by Alexandre Courbot 1 month, 3 weeks ago
Since `ALIGN` is a const parameter, this assertion can be done in const
context using the `assert!` macro.

Suggested-by: Alice Ryhl <aliceryhl@google.com>
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
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(-)

diff --git a/rust/kernel/ptr.rs b/rust/kernel/ptr.rs
index e3893ed04049..5b6a382637fe 100644
--- a/rust/kernel/ptr.rs
+++ b/rust/kernel/ptr.rs
@@ -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,
-- 
Alexandre Courbot <acourbot@nvidia.com>
Re: [PATCH] rust: ptr: replace unneeded use of `build_assert`
Posted by Miguel Ojeda 2 weeks, 5 days ago
On Tue, Dec 16, 2025 at 9:25 AM Alexandre Courbot <acourbot@nvidia.com> wrote:
>
> Since `ALIGN` is a const parameter, this assertion can be done in const
> context using the `assert!` macro.
>
> Suggested-by: Alice Ryhl <aliceryhl@google.com>
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>

Applied to `rust-next` -- thanks everyone!

Cheers,
Miguel
Re: [PATCH] rust: ptr: replace unneeded use of `build_assert`
Posted by Alice Ryhl 1 month, 3 weeks ago
On Tue, Dec 16, 2025 at 9:25 AM Alexandre Courbot <acourbot@nvidia.com> wrote:
>
> Since `ALIGN` is a const parameter, this assertion can be done in const
> context using the `assert!` macro.
>
> Suggested-by: Alice Ryhl <aliceryhl@google.com>
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>

Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Re: [PATCH] rust: ptr: replace unneeded use of `build_assert`
Posted by Alexandre Courbot 3 weeks ago
On Wed Dec 17, 2025 at 10:22 PM JST, Alice Ryhl wrote:
> On Tue, Dec 16, 2025 at 9:25 AM Alexandre Courbot <acourbot@nvidia.com> wrote:
>>
>> Since `ALIGN` is a const parameter, this assertion can be done in const
>> context using the `assert!` macro.
>>
>> Suggested-by: Alice Ryhl <aliceryhl@google.com>
>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>
> Reviewed-by: Alice Ryhl <aliceryhl@google.com>

Miguel, are you comfortable taking this through the Rust tree for this
cycle?
Re: [PATCH] rust: ptr: replace unneeded use of `build_assert`
Posted by Miguel Ojeda 3 weeks ago
On Sat, Jan 17, 2026 at 4:17 AM Alexandre Courbot <acourbot@nvidia.com> wrote:
>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
Re: [PATCH] rust: ptr: replace unneeded use of `build_assert`
Posted by Gary Guo 3 weeks ago
On Sat Jan 17, 2026 at 2:30 PM GMT, Miguel Ojeda wrote:
> On Sat, Jan 17, 2026 at 4:17 AM Alexandre Courbot <acourbot@nvidia.com> wrote:
>>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
Re: [PATCH] rust: ptr: replace unneeded use of `build_assert`
Posted by Miguel Ojeda 3 weeks ago
On Sat, Jan 17, 2026 at 5:49 PM Gary Guo <gary@garyguo.net> wrote:
>
> 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