2024-01-11 02:34:02

by kernel test robot

[permalink] [raw]
Subject: lib/vsprintf.c:1528:9: warning: function 'va_format' might be a candidate for 'gnu_printf' format attribute

tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: acc657692aed438e9931438f8c923b2b107aebf9
commit: 45c3e93d751ea50861c796da3cbfc848fa6ddf55 vsprintf: Factor out %pV handler as va_format()
date: 4 years, 9 months ago
config: i386-allnoconfig (https://download.01.org/0day-ci/archive/20240111/[email protected]/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240111/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

lib/vsprintf.c:625:7: warning: no previous prototype for 'pointer_string' [-Wmissing-prototypes]
625 | char *pointer_string(char *buf, char *end, const void *ptr,
| ^~~~~~~~~~~~~~
lib/vsprintf.c: In function 'va_format':
>> lib/vsprintf.c:1528:9: warning: function 'va_format' might be a candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
1528 | buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va);
| ^~~


vim +1528 lib/vsprintf.c

1522
1523 static char *va_format(char *buf, char *end, struct va_format *va_fmt)
1524 {
1525 va_list va;
1526
1527 va_copy(va, *va_fmt->va);
> 1528 buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va);
1529 va_end(va);
1530
1531 return buf;
1532 }
1533

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


2024-01-21 13:56:54

by Andy Shevchenko

[permalink] [raw]
Subject: Re: lib/vsprintf.c:1528:9: warning: function 'va_format' might be a candidate for 'gnu_printf' format attribute

On Thu, Jan 11, 2024 at 10:33:09AM +0800, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: acc657692aed438e9931438f8c923b2b107aebf9
> commit: 45c3e93d751ea50861c796da3cbfc848fa6ddf55 vsprintf: Factor out %pV handler as va_format()
> date: 4 years, 9 months ago

Blast from the past?!

..

> All warnings (new ones prefixed by >>):
>
> lib/vsprintf.c:625:7: warning: no previous prototype for 'pointer_string' [-Wmissing-prototypes]
> 625 | char *pointer_string(char *buf, char *end, const void *ptr,
> | ^~~~~~~~~~~~~~

ce9d3eceb7ff ("lib/vsprintf: Make function pointer_string static")

..

> lib/vsprintf.c: In function 'va_format':
> >> lib/vsprintf.c:1528:9: warning: function 'va_format' might be a candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
> 1528 | buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va);
> | ^~~

This might be still valid, but I have no idea how to properly fix it.

--
With Best Regards,
Andy Shevchenko



2024-02-13 12:06:20

by Rasmus Villemoes

[permalink] [raw]
Subject: Re: lib/vsprintf.c:1528:9: warning: function 'va_format' might be a candidate for 'gnu_printf' format attribute

On 21/01/2024 14.54, Andy Shevchenko wrote:
> On Thu, Jan 11, 2024 at 10:33:09AM +0800, kernel test robot wrote:
>> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
>> head: acc657692aed438e9931438f8c923b2b107aebf9
>> commit: 45c3e93d751ea50861c796da3cbfc848fa6ddf55 vsprintf: Factor out %pV handler as va_format()
>> date: 4 years, 9 months ago
>
> Blast from the past?!
>
> ..
>
>> lib/vsprintf.c: In function 'va_format':
>>>> lib/vsprintf.c:1528:9: warning: function 'va_format' might be a candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
>> 1528 | buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va);
>> | ^~~
>
> This might be still valid, but I have no idea how to properly fix it.
>

It's a bogus warning, and the fix belongs in the compiler. When
vsnprintf() is called, but neither the format arg nor the va_list arg
are direct arguments to the caller (and the va_list is not built from
actual varargs using va_start()), there's absolutely no way a __printf
attribute could be appropriate.

IDK if we can shut up the test robot by locally disabling the
Wsuggest-attribute with some pragma.

Rasmus