[PATCH] rust: kunit: fix warning when !CONFIG_PRINTK

0 views
Skip to first unread message

Alexandre Courbot

unread,
Feb 24, 2026, 2:45:53 AM (4 days ago) Feb 24
to Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org, Alexandre Courbot
If `CONFIG_PRINTK` is not set, then the following warnings are issued
during build:

warning: unused variable: `args`
--> ../rust/kernel/kunit.rs:16:12
|
16 | pub fn err(args: fmt::Arguments<'_>) {
| ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
|
= note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default

warning: unused variable: `args`
--> ../rust/kernel/kunit.rs:32:13
|
32 | pub fn info(args: fmt::Arguments<'_>) {
| ^^^^ help: if this is intentional, prefix it with an underscore: `_args`

Fix this by allowing unused variables on these methods for this
(arguably rare) case.

Fixes: a66d733da801 ("rust: support running Rust documentation tests as KUnit ones")
Signed-off-by: Alexandre Courbot <acou...@nvidia.com>
---
rust/kernel/kunit.rs | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs
index f93f24a60bdd..5da342f5c84a 100644
--- a/rust/kernel/kunit.rs
+++ b/rust/kernel/kunit.rs
@@ -13,6 +13,8 @@
///
/// Public but hidden since it should only be used from KUnit generated code.
#[doc(hidden)]
+// `args` is unused if `CONFIG_PRINTK` is not set.
+#[allow(unused_variables)]
pub fn err(args: fmt::Arguments<'_>) {
// SAFETY: The format string is null-terminated and the `%pA` specifier matches the argument we
// are passing.
@@ -29,6 +31,8 @@ pub fn err(args: fmt::Arguments<'_>) {
///
/// Public but hidden since it should only be used from KUnit generated code.
#[doc(hidden)]
+// `args` is unused if `CONFIG_PRINTK` is not set.
+#[allow(unused_variables)]
pub fn info(args: fmt::Arguments<'_>) {
// SAFETY: The format string is null-terminated and the `%pA` specifier matches the argument we
// are passing.

---
base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
change-id: 20260224-unused_var_err-996d7ffa27c5

Best regards,
--
Alexandre Courbot <acou...@nvidia.com>

Alice Ryhl

unread,
Feb 24, 2026, 2:49:49 AM (4 days ago) Feb 24
to Alexandre Courbot, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
On Tue, Feb 24, 2026 at 04:45:30PM +0900, Alexandre Courbot wrote:
> If `CONFIG_PRINTK` is not set, then the following warnings are issued
> during build:
>
> warning: unused variable: `args`
> --> ../rust/kernel/kunit.rs:16:12
> |
> 16 | pub fn err(args: fmt::Arguments<'_>) {
> | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
> |
> = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
>
> warning: unused variable: `args`
> --> ../rust/kernel/kunit.rs:32:13
> |
> 32 | pub fn info(args: fmt::Arguments<'_>) {
> | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
>
> Fix this by allowing unused variables on these methods for this
> (arguably rare) case.
>
> Fixes: a66d733da801 ("rust: support running Rust documentation tests as KUnit ones")
> Signed-off-by: Alexandre Courbot <acou...@nvidia.com>

I think this would be a better fix:

diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs
index f93f24a60bdd..dbf3c62ffa09 100644
--- a/rust/kernel/kunit.rs
+++ b/rust/kernel/kunit.rs
@@ -23,6 +23,9 @@ pub fn err(args: fmt::Arguments<'_>) {
core::ptr::from_ref(&args).cast::<c_void>(),
);
}
+
+ #[cfg(not(CONFIG_PRINTK))]
+ let _ = args;
}

/// Prints a KUnit info-level message.
@@ -39,6 +42,9 @@ pub fn info(args: fmt::Arguments<'_>) {
core::ptr::from_ref(&args).cast::<c_void>(),
);
}
+
+ #[cfg(not(CONFIG_PRINTK))]
+ let _ = args;
}

/// Asserts that a boolean expression is `true` at runtime.

Alice Ryhl

unread,
Feb 24, 2026, 2:52:36 AM (4 days ago) Feb 24
to Alexandre Courbot, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
Or if a bare _ doesn't work, then:

let _unused = args;

matching tracepoint.rs

Alice

David Gow

unread,
Feb 24, 2026, 4:01:22 AM (4 days ago) Feb 24
to Alexandre Courbot, Brendan Higgins, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
Le 24/02/2026 à 3:45 PM, 'Alexandre Courbot' via KUnit Development a écrit :
> If `CONFIG_PRINTK` is not set, then the following warnings are issued
> during build:
>
> warning: unused variable: `args`
> --> ../rust/kernel/kunit.rs:16:12
> |
> 16 | pub fn err(args: fmt::Arguments<'_>) {
> | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
> |
> = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
>
> warning: unused variable: `args`
> --> ../rust/kernel/kunit.rs:32:13
> |
> 32 | pub fn info(args: fmt::Arguments<'_>) {
> | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
>
> Fix this by allowing unused variables on these methods for this
> (arguably rare) case.
>
> Fixes: a66d733da801 ("rust: support running Rust documentation tests as KUnit ones")
> Signed-off-by: Alexandre Courbot <acou...@nvidia.com>
> ---

Thanks. I think Alice's suggestion of adding a `let _ = args;` line,
rather than disabling the unused_variables warning is probably the
better way of handling this.

(That being said, those err() and info() functions probably need some
reworking so that -- in the cases where it makes sense -- they call into
the KUnit logging functions, not just printk.)

Cheers,
-- David

Alexandre Courbot

unread,
Feb 24, 2026, 5:38:10 AM (4 days ago) Feb 24
to Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org, Alexandre Courbot
If `CONFIG_PRINTK` is not set, then the following warnings are issued
during build:

warning: unused variable: `args`
--> ../rust/kernel/kunit.rs:16:12
|
16 | pub fn err(args: fmt::Arguments<'_>) {
| ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
|
= note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default

warning: unused variable: `args`
--> ../rust/kernel/kunit.rs:32:13
|
32 | pub fn info(args: fmt::Arguments<'_>) {
| ^^^^ help: if this is intentional, prefix it with an underscore: `_args`

Fix this by adding a no-op assignment using `args` when `CONFIG_PRINTK`
is not set.

Fixes: a66d733da801 ("rust: support running Rust documentation tests as KUnit ones")
Signed-off-by: Alexandre Courbot <acou...@nvidia.com>
---
Changes in v2:
- Use a no-op assignment instead of the wider `#[allow(unused_variables)]`.
- Link to v1: https://patch.msgid.link/20260224-unused_var_...@nvidia.com
---
rust/kernel/kunit.rs | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs
index f93f24a60bdd..a1edf7491579 100644
--- a/rust/kernel/kunit.rs
+++ b/rust/kernel/kunit.rs
@@ -14,6 +14,10 @@
/// Public but hidden since it should only be used from KUnit generated code.
#[doc(hidden)]
pub fn err(args: fmt::Arguments<'_>) {
+ // `args` is unused if `CONFIG_PRINTK` is not set - this avoids a build-time warning.
+ #[cfg(not(CONFIG_PRINTK))]
+ let _ = args;
+
// SAFETY: The format string is null-terminated and the `%pA` specifier matches the argument we
// are passing.
#[cfg(CONFIG_PRINTK)]
@@ -30,6 +34,10 @@ pub fn err(args: fmt::Arguments<'_>) {
/// Public but hidden since it should only be used from KUnit generated code.
#[doc(hidden)]
pub fn info(args: fmt::Arguments<'_>) {
+ // `args` is unused if `CONFIG_PRINTK` is not set - this avoids a build-time warning.
+ #[cfg(not(CONFIG_PRINTK))]
+ let _ = args;
+
// SAFETY: The format string is null-terminated and the `%pA` specifier matches the argument we
// are passing.
#[cfg(CONFIG_PRINTK)]

---
base-commit: 6de23f81a5e08be8fbf5e8d7e9febc72a5b5f27f
change-id: 20260224-unused_var_err-996d7ffa27c5

Best regards,
--
Alexandre Courbot <acou...@nvidia.com>

Alice Ryhl

unread,
Feb 24, 2026, 6:44:19 AM (4 days ago) Feb 24
to Alexandre Courbot, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
On Tue, Feb 24, 2026 at 07:37:56PM +0900, Alexandre Courbot wrote:
> If `CONFIG_PRINTK` is not set, then the following warnings are issued
> during build:
>
> warning: unused variable: `args`
> --> ../rust/kernel/kunit.rs:16:12
> |
> 16 | pub fn err(args: fmt::Arguments<'_>) {
> | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
> |
> = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
>
> warning: unused variable: `args`
> --> ../rust/kernel/kunit.rs:32:13
> |
> 32 | pub fn info(args: fmt::Arguments<'_>) {
> | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
>
> Fix this by adding a no-op assignment using `args` when `CONFIG_PRINTK`
> is not set.
>
> Fixes: a66d733da801 ("rust: support running Rust documentation tests as KUnit ones")
> Signed-off-by: Alexandre Courbot <acou...@nvidia.com>

Reviewed-by: Alice Ryhl <alic...@google.com>

Andreas Hindborg

unread,
Feb 24, 2026, 6:51:33 AM (4 days ago) Feb 24
to Alexandre Courbot, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org, Alexandre Courbot
I think (didn't test) that you can use a conditional attribute [1] instead:

pub fn err(
#[cfg_attr(not(CONFIG_PRINTK), expect(unused))]
args: fmt::Arguments<'_>
) {

Best regards,
Andreas Hindborg


[1] https://doc.rust-lang.org/reference/conditional-compilation.html#the-cfg_attr-attribute

Andreas Hindborg

unread,
Feb 24, 2026, 7:58:09 AM (4 days ago) Feb 24
to Alice Ryhl, Alexandre Courbot, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
Why not a conditional attribute on the argument?


Best regards,
Andreas Hindborg


Alexandre Courbot

unread,
Feb 24, 2026, 8:07:24 AM (4 days ago) Feb 24
to Andreas Hindborg, Alice Ryhl, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
Yup, that works as well, and I think I like it better as it is more
localized. Alice, WDYT?

Alice Ryhl

unread,
Feb 24, 2026, 8:15:32 AM (4 days ago) Feb 24
to Alexandre Courbot, Andreas Hindborg, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
I think the other options is also quite localised. It's per function
argument too. shrug

Alice

David Gow

unread,
Feb 24, 2026, 8:56:28 AM (4 days ago) Feb 24
to Alexandre Courbot, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
Le 24/02/2026 à 6:37 PM, 'Alexandre Courbot' via KUnit Development a écrit :
> If `CONFIG_PRINTK` is not set, then the following warnings are issued
> during build:
>
> warning: unused variable: `args`
> --> ../rust/kernel/kunit.rs:16:12
> |
> 16 | pub fn err(args: fmt::Arguments<'_>) {
> | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
> |
> = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
>
> warning: unused variable: `args`
> --> ../rust/kernel/kunit.rs:32:13
> |
> 32 | pub fn info(args: fmt::Arguments<'_>) {
> | ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
>
> Fix this by adding a no-op assignment using `args` when `CONFIG_PRINTK`
> is not set.
>
> Fixes: a66d733da801 ("rust: support running Rust documentation tests as KUnit ones")
> Signed-off-by: Alexandre Courbot <acou...@nvidia.com>
> ---
> Changes in v2:
> - Use a no-op assignment instead of the wider `#[allow(unused_variables)]`.
> - Link to v1: https://patch.msgid.link/20260224-unused_var_...@nvidia.com
> ---

Reviewed-by: David Gow <da...@davidgow.net>

Cheers,
-- David

David Gow

unread,
Feb 24, 2026, 8:56:36 AM (4 days ago) Feb 24
to Alexandre Courbot, Andreas Hindborg, Alice Ryhl, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
Personally, I have a slight preference for the current `let _ = args`
option -- we'll still want to be able to format (at least some of) these
messages to the KUnit test log, even if printk is disabled. So in the
interest of avoiding churn in the function prototype, this version seems
more future-proof.

But I'm not enormously worried either way.

Cheers,
-- David

Alexandre Courbot

unread,
Feb 24, 2026, 9:23:41 AM (4 days ago) Feb 24
to David Gow, Andreas Hindborg, Alice Ryhl, Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin, Trevor Gross, Danilo Krummrich, Shuah Khan, linux-k...@vger.kernel.org, kuni...@googlegroups.com, rust-fo...@vger.kernel.org, linux-...@vger.kernel.org
Sounds good - let's keep the current version then.
Reply all
Reply to author
Forward
0 new messages