On 07/01/2024 19:21, Andrew Morton wrote:
On Sun,  7 Jan 2024 17:16:41 +0800 Baoquan He <b...@redhat.com> wrote:

with GCC 13.2.1 and W=1, there's compiling warning like this:

kernel/panic.c: In function ?__warn?:
kernel/panic.c:676:17: warning: function ?__warn? might be a candidate for 
?gnu_printf? format attribute [-Wsuggest-attribute=format]
   676 |                 vprintk(args->fmt, args->args);
       |                 ^~~~~~~

The normal __printf(x,y) adding can't fix it. So add workaround which
disables -Wsuggest-attribute=format to mute it.

...

--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -666,8 +666,13 @@ void __warn(const char *file, int line, void *caller, 
unsigned taint,
                pr_warn("WARNING: CPU: %d PID: %d at %pS\n",
                        raw_smp_processor_id(), current->pid, caller);
+#pragma GCC diagnostic push
+#ifndef __clang__
+#pragma GCC diagnostic ignored "-Wsuggest-attribute=format"
+#endif
        if (args)
                vprintk(args->fmt, args->args);
+#pragma GCC diagnostic pop
print_modules();
__warn() clearly isn't such a candidate.  I'm suspecting that gcc's
implementation of this warning is pretty crude.  Is it a new thing in
gcc-13.2?

I suspect the warning is about vprintk(), which does seem a printf-like function but something (early inlining?) may be messing up the context and GCC warns about __warn(). This may be bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=28492

If vprintk() already has the format attribute, then the messed up function name may be confusing GCC into warning again about it.

Best wishes,

Manuel.

Reply via email to