On 2022-03-01, Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: >> > lib/vsprintf.c: In function 'va_format': >> > lib/vsprintf.c:1759:9: warning: function 'va_format' might be a candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format] >> > 1759 | buf += vsnprintf(buf, end > buf ? end - buf : 0, va_fmt->fmt, va); >> > | ^~~ >> >> I wonder what this means. > > It means the compiler thinks we might want to add: > > __attribute__((format(gnu_printf, x, y))) to the function declaration so it > can type-check the arguments. > > 'format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)' > The 'format' attribute specifies that a function takes 'printf', > 'scanf', 'strftime' or 'strfmon' style arguments that should be > type-checked against a format string. For example, the > declaration: > > extern int > my_printf (void *my_object, const char *my_format, ...) > __attribute__ ((format (printf, 2, 3))); > > causes the compiler to check the arguments in calls to 'my_printf' > for consistency with the 'printf' style format string argument > 'my_format'. > > > I haven't looked into this at all and have no idea if we should. AFAICT it is not possible to use the gnu_printf format attribute for this because the va_list to check is a field within the passed in struct pointer @va_fmt. John Ogness