[PATCH] panic: suppress gnu_printf warning

Manuel López-Ibáñez lopezibanez@gmail.com
Tue Jan 9 13:25:00 GMT 2024


On 07/01/2024 19:21, Andrew Morton wrote:
> On Sun,  7 Jan 2024 17:16:41 +0800 Baoquan He <bhe@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.



More information about the Gcc mailing list