Skip to contentSkip to conversation

bug: shut up format attribute warning for clang as well

PATCH Superseded Arnd Bergmann 6 participants 7 messages Mar 20 – Mar 24 Library code

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 bug: shut up format attribute warning for clang as well

From: Arnd Bergmann <[email protected]>

Like gcc, clang-22 now also warns about a function that it incorrectly identifies as a printf-style format:

lib/bug.c:190:22: error: diagnostic behavior may be improved by adding the 'format(printf, 1, 0)' attribute to the declaration of '__warn_printf' [-Werror,-Wmissing-format-attribute]

  179 | static void __warn_printf(const char *fmt, struct pt_regs *regs)
      | __attribute__((format(printf, 1, 0)))
  180 | {
  181 |         if (!fmt)
  182 |                 return;
  183 |
  184 | #ifdef HAVE_ARCH_BUG_FORMAT_ARGS
  185 |         if (regs) {
  186 |                 struct arch_va_list _args;
  187 |                 va_list *args = __warn_args(&_args, regs);
  188 |
  189 |                 if (args) {
  190 |                         vprintk(fmt, *args);
      |                                           ^

Turn off this warning for all compilers and versions.

Fixes d36067d6ea00 ("bug: Hush suggest-attribute=format for __warn_printf()")
---
 lib/bug.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
lib/bug.c +1 -2
index bbc301097749..374feb144f0b 100644
@@ -174,8 +174,7 @@ struct bug_entry *find_bug(unsigned long bugaddr)
 }
 
 __diag_push();
-__diag_ignore(GCC, all, "-Wsuggest-attribute=format",
-	      "Not a valid __printf() conversion candidate.");
+__diag_ignore_all("-Wmissing-format-attribute", "Not a valid __printf() conversion candidate.");
 static void __warn_printf(const char *fmt, struct pt_regs *regs)
 {
 	if (!fmt)
Signature · 1 line
2.39.5
Reviewed-by on v1 1/1
#1 lore raw
Quoted 21 lines · Arnd Bergmann

From: Arnd Bergmann <[email protected]>

Like gcc, clang-22 now also warns about a function that it incorrectly identifies as a printf-style format:

lib/bug.c:190:22: error: diagnostic behavior may be improved by adding the 'format(printf, 1, 0)' attribute to the declaration of '__warn_printf' [-Werror,-Wmissing-format-attribute]

  179 | static void __warn_printf(const char *fmt, struct pt_regs *regs)
      | __attribute__((format(printf, 1, 0)))
  180 | {
  181 |         if (!fmt)
  182 |                 return;
  183 |
  184 | #ifdef HAVE_ARCH_BUG_FORMAT_ARGS
  185 |         if (regs) {
  186 |                 struct arch_va_list _args;
  187 |                 va_list *args = __warn_args(&_args, regs);
  188 |
  189 |                 if (args) {
  190 |                         vprintk(fmt, *args);
      |                                           ^
Quoted 4 lines

Turn off this warning for all compilers and versions.

Fixes d36067d6ea00 ("bug: Hush suggest-attribute=format for __warn_printf()")

Yeah, it looks like this flag has been recognized by clang for a long time for GCC compatibility but it only recently started matching GCC's behavior.

Quoted 21 lines
---
 lib/bug.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
lib/bug.c +1 -2
index bbc301097749..374feb144f0b 100644
@@ -174,8 +174,7 @@ struct bug_entry *find_bug(unsigned long bugaddr)
 }
 
 __diag_push();
-__diag_ignore(GCC, all, "-Wsuggest-attribute=format",
-	      "Not a valid __printf() conversion candidate.");
+__diag_ignore_all("-Wmissing-format-attribute", "Not a valid __printf() conversion candidate.");
 static void __warn_printf(const char *fmt, struct pt_regs *regs)
 {
 	if (!fmt)
Signature · 1 line
2.39.5
#2 lore raw
In reply to Arnd Bergmann
Quoted 34 lines · Arnd Bergmann

From: Arnd Bergmann <[email protected]>

Like gcc, clang-22 now also warns about a function that it incorrectly identifies as a printf-style format:

lib/bug.c:190:22: error: diagnostic behavior may be improved by adding the 'format(printf, 1, 0)' attribute to the declaration of '__warn_printf' [-Werror,-Wmissing-format-attribute]

  179 | static void __warn_printf(const char *fmt, struct pt_regs *regs)
      | __attribute__((format(printf, 1, 0)))
  180 | {
  181 |         if (!fmt)
  182 |                 return;
  183 |
  184 | #ifdef HAVE_ARCH_BUG_FORMAT_ARGS
  185 |         if (regs) {
  186 |                 struct arch_va_list _args;
  187 |                 va_list *args = __warn_args(&_args, regs);
  188 |
  189 |                 if (args) {
  190 |                         vprintk(fmt, *args);
      |                                           ^

Turn off this warning for all compilers and versions.

Fixes d36067d6ea00 ("bug: Hush suggest-attribute=format for __warn_printf()")
---
 lib/bug.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
lib/bug.c +0 -0
index bbc301097749..374feb144f0b 100644

lib/bug.c struct bug_entry *find_bug(unsigned long bugaddr) · line 180

Quoted 9 lines
lib/bug.c +1 -2
@@ -174,8 +174,7 @@ struct bug_entry *find_bug(unsigned long bugaddr)
 }
 
 __diag_push();
-__diag_ignore(GCC, all, "-Wsuggest-attribute=format",
-	      "Not a valid __printf() conversion candidate.");
+__diag_ignore_all("-Wmissing-format-attribute", "Not a valid __printf() conversion candidate.");
 static void __warn_printf(const char *fmt, struct pt_regs *regs)
 {
 	if (!fmt)

There is actually a superior fix for this warning that Andy Schevchenko posted here (mine just happened to get merged first):

https://lore.kernel.org/all/[email protected]/T/#u

Should we just switch over to that? Looks like it should work for both compilers.

#3 lore raw
Quoted 9 lines · Brendan Jackman

On Fri Mar 20, 2026 at 9:14 PM UTC, Arnd Bergmann wrote:

There is actually a superior fix for this warning that Andy Schevchenko posted here (mine just happened to get merged first):

https://lore.kernel.org/all/[email protected]/T/#u

Should we just switch over to that? Looks like it should work for both compilers.

Right, I tried that again and it works. I had confused it with the similar logic to disable the warning on va_format(), which is not that easy to avoid.

Arnd

maintainer
#4 lore raw
Quoted 6 lines · On Mon, 23 Mar 2026 16:38:14 +0100 "Arnd Bergmann" <[email protected]> wrote:
Quoted 5 lines · Brendan Jackman

On Fri Mar 20, 2026 at 9:14 PM UTC, Arnd Bergmann wrote:

There is actually a superior fix for this warning that Andy Schevchenko posted here (mine just happened to get merged first):

Quoted 9 lines
Quoted 4 lines

https://lore.kernel.org/all/[email protected]/T/#u

Should we just switch over to that? Looks like it should work for both compilers.

Right, I tried that again and it works. I had confused it with the similar logic to disable the warning on va_format(), which is not that easy to avoid.

What I think I'm hearing is that we should revert Brendan's d36067d6ea00 ("bug: Hush suggest-attribute=format for __warn_printf()") then apply Andy's
https://lore.kernel.org/all/[email protected]/T/#u,
yes?

Could someone please prepare a suitably changelogged and tested patch for that?

#5 lore raw
Quoted 18 lines · Andrew Morton
Quoted 6 lines · On Mon, 23 Mar 2026 16:38:14 +0100 "Arnd Bergmann" <[email protected]> wrote:
Quoted 5 lines · Brendan Jackman

On Fri Mar 20, 2026 at 9:14 PM UTC, Arnd Bergmann wrote:

There is actually a superior fix for this warning that Andy Schevchenko posted here (mine just happened to get merged first):

Quoted 9 lines
Quoted 4 lines

https://lore.kernel.org/all/[email protected]/T/#u

Should we just switch over to that? Looks like it should work for both compilers.

Right, I tried that again and it works. I had confused it with the similar logic to disable the warning on va_format(), which is not that easy to avoid.

Quoted 8 lines

What I think I'm hearing is that we should revert Brendan's d36067d6ea00 ("bug: Hush suggest-attribute=format for __warn_printf()") then apply Andy's
https://lore.kernel.org/all/[email protected]/T/#u,
yes?

Could someone please prepare a suitably changelogged and tested patch for that?

I now sent the version that I had in my tree already as a v2 of my patch. I tested this with gcc-16 and clang-22 in random configurations.

Arnd

#6 lore raw
Quoted 23 lines · Arnd Bergmann
Quoted 22 lines · Andrew Morton
Quoted 6 lines · On Mon, 23 Mar 2026 16:38:14 +0100 "Arnd Bergmann" <[email protected]> wrote:
Quoted 5 lines · Brendan Jackman

On Fri Mar 20, 2026 at 9:14 PM UTC, Arnd Bergmann wrote:

There is actually a superior fix for this warning that Andy Schevchenko posted here (mine just happened to get merged first):

Quoted 8 lines
Quoted 4 lines

https://lore.kernel.org/all/[email protected]/T/#u

Should we just switch over to that? Looks like it should work for both compilers.

Right, I tried that again and it works. I had confused it with the similar logic to disable the warning on va_format(), which is not that easy to avoid.

What I think I'm hearing is that we should revert Brendan's d36067d6ea00 ("bug: Hush suggest-attribute=format for __warn_printf()") then apply Andy's
https://lore.kernel.org/all/[email protected]/T/#u,
yes?

Quoted 6 lines
Quoted 2 lines

Could someone please prepare a suitably changelogged and tested patch for that?

I now sent the version that I had in my tree already as a v2 of my patch. I tested this with gcc-16 and clang-22 in random configurations.

Thank you!

Signature · 2 lines
With Best Regards,
Andy Shevchenko