Compiling kernel with -Wformat-signedness gcc flag

Jeffrey Walton noloader at gmail.com
Fri Mar 9 08:24:19 EST 2018


On Fri, Mar 9, 2018 at 8:16 AM, Himanshu Jha
<himanshujha199640 at gmail.com> wrote:
> Hello everyone,
>
>
> I just compiled the kernel by passing "-Wformat-signedness" flag
>
> https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
>
> -Wformat-signedness:
> If -Wformat is specified, also warn if the format string requires an
> unsigned argument and the argument is signed and vice versa.
>
> Now, the C standard says:
>
> "If a conversion specification is invalid, the behavior is undefined.
> If any argument is
> not the correct type for the corresponding conversion specification, the
> behavior is *undefined*."
>
> For eg:
>
> drivers/iio/trigger/stm32-timer-trigger.c:228:24: warning: format ‘%d’
> expects argument of type ‘int’, but argument 3 has type ‘unsigned int’
> [-Wformat=]
>   return sprintf(buf, "%d\n", (unsigned int)freq);
>                          ~^     ~~~~~~~~~~~~~~~~~~
>                                                 %d
>
> What is the rationale for not including/using this flag in the
> HOSTCFLAGS in the Makefile ?

In the past, it was posited the toolchain should be smart enough to
know when the programmer intended/needed a signed value versus an
unsigned one. Also see
http://linux.derkeiler.com/Mailing-Lists/Kernel/2006-11/msg08325.html.

Jeff



More information about the Kernelnewbies mailing list