Re: [PATCH 1/2] tracing: work around -Wmissing-format-attribute warning
Andy Shevchenko <[email protected]> Tue, 2 Jun 2026 21:59:04 +0300
| Newsgroups | dev.linux.lists.brcm80211,dev.linux.lists.llvm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-rdma,org.kernel.vger.linux-trace-kernel,org.kernel.vger.linux-wireless |
|---|---|
| Organization | Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo |
| Message-ID | <[email protected]> |
On Tue, Jun 02, 2026 at 05:07:05PM +0200, Arnd Bergmann wrote: > > A number of tracing headers turn off -Wsuggest-attribute=format for > gcc, but they don't turn it off for clang, so the same warning still > happens on new versions of clang that support the format attribute. > > To avoid duplicating the same thing in each tracing header, as well > as changing all of them to also turn it off for clang, add a new > __vsnprintf() helper that is not annotated this way in linux/sprintf.h > but is defined to work the same way as the regular vsprintf. vsprintf() > Aside from tracing, the same thing can be used in va_format(), > which is part of lib/vsprintf.c itself. ... > --- a/include/linux/sprintf.h > +++ b/include/linux/sprintf.h > @@ -12,6 +12,7 @@ __printf(2, 3) int sprintf(char *buf, const char * fmt, ...); > __printf(2, 0) int vsprintf(char *buf, const char *, va_list); > __printf(3, 4) int snprintf(char *buf, size_t size, const char *fmt, ...); > __printf(3, 0) int vsnprintf(char *buf, size_t size, const char *fmt, va_list args); > +int __vsnprintf(char *buf, size_t size, const char *fmt, va_list args); Why the __printf() annotation is in the C file and not here? Is this all about headers as the second paragraph in the commit message explains? I would add a comment to explain it here, otherwise we might see false patches to "make things consistent" in a wrong way. > __printf(3, 4) int scnprintf(char *buf, size_t size, const char *fmt, ...); > __printf(3, 0) int vscnprintf(char *buf, size_t size, const char *fmt, va_list args); > __printf(2, 3) __malloc char *kasprintf(gfp_t gfp, const char *fmt, ...); -- With Best Regards, Andy Shevchenko