Hi Peter, They already responded and said it is invalid, according to him you need to use:
-Wformat-signedness On Tue, Feb 24, 2026 at 4:25 PM Peter Barada <[email protected]> wrote: > I've reported a GCC -Wformat bug - and can cause bug using host GCC. > > See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124231 > > On 2/23/26 13:21, Peter Barada wrote: > > > > Even weirder is when I configure master for nucleo-h743zi2:jubmo, > > build it, I don't see warnings > > from arch/arm/src/armv7-m/arm_hardfault.c, but if I then attempt to > > compile the preprocessed source for > > arch/arm/src/armv7-m/arm_hardfault.c (using either version of the ARM > > compiler) it now generates the following warning: > > > > peter@legion:~/git/nuttx/nuttx-master/nuttx/arch/arm/src$ > arm-none-eabi-gcc -c -Wstrict-prototypes -Wno-attributes > -Wno-unknown-pragmas -Wno-psabi -Os -fno-strict-aliasing > -fomit-frame-pointer --param=min-pagesize=0 -fno-common -Wall -Wshadow > -Wundef -ffunction-sections -fdata-sections "-g" -mlittle-endian > -march=armv7e-m -mtune=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb > -Wa,-mthumb -Wa,-mimplicit-it=always -isystem > /home/peter/git/nuttx/nuttx-master/nuttx/include -D__NuttX__ -DNDEBUG > -D__KERNEL__ -I /home/peter/git/nuttx/nuttx-master/nuttx/arch/arm/src/chip > -I /home/peter/git/nuttx/nuttx-master/nuttx/arch/arm/src/common -I > /home/peter/git/nuttx/nuttx-master/nuttx/arch/arm/src/armv7-m -I > /home/peter/git/nuttx/nuttx-master/nuttx/sched /tmp/arm_hardfault.c -o > /tmp/arm_hardfault.o > > /tmp/arm_hardfault.c: In function 'arm_hardfault': > > /tmp/arm_hardfault.c:4864:12: warning: the address of 'cfsr' will always > evaluate as 'true' [-Waddress] > > 4864 | ((void)(1 || &( > > | ^~ > > /tmp/arm_hardfault.c:4869:12: warning: the address of 'hfsr' will always > evaluate as 'true' [-Waddress] > > 4869 | ((void)(1 || &( > > | ^~ > > peter@legion:~/git/nuttx/nuttx-master/nuttx/arch/arm/src$ > > > > The warning is is generated from the UNUSED() macro meant to suppress > > unused parameter warnings from the compiler. Why it takes removing all > > the linemarkers from the preprocessed source to generate the warning > > is what's so confusing... > > > > On 2/23/26 01:24, Peter Barada wrote: > >> > >> Tomek, > >> > >> Using arm-gcc-none-eabi-gcc-14.2.1 from the STMicroelectronics > >> Arduino toolchain "arm-none-eabi-gcc-14.2.1 (xPack GNU Arm Embedded > >> GCC x86_64) 14.2.1 20241119" I see the _same_ behavior where no > >> format warnings are generated without removing linemarkers from the > >> preprocessed source. > >> > >> The following tiny testcase (copmiled using "-Wall -c test.c" ) > >> elicits the format warning from either compiler version as expected: > >> > >> typedef __UINT32_TYPE__ uint32_t; > >> extern uint32_t getreg32(uint32_t addr); > >> extern void setreg32(uint32_t addr, uint32_t value); > >> extern void syslog(int priority, const char *fmt, ...) \ > >> __attribute__((__format__(__printf__, 2, 3))); > >> void testcase(uint32_t addr, uint32_t value) > >> { > >> syslog(6, "%s: " "%08x[%08x]->%08x\n", __FUNCTION__, addr, > getreg32(addr), value); > >> setreg32(addr, value); > >> } > >> > >> The question I have is why doesn't building Nuttx (with > >> DEBUG_IRQ_INFO enabled) for arm (nucleo-h743zi2:jumbo in my case) > >> cause stm32_irq.c to show the same format warning?? > >> > >> On 2/22/26 20:05, Tomek CEDRO wrote: > >>> What happens on GCC 14.2? I know this one is preferred :-) > >>> > >>> -- > >>> CeDeROM, SQ7MHZ,http://www.tomek.cedro.info > >>> > >>> On Sun, Feb 22, 2026 at 11:12 PM Peter Barada<[email protected]> > wrote: > >>>> This is _really_ weird. I'm seeing what looks (to me) to be a bug in > >>>> arm-none-eabig-gcc where it _may_ generate format warnings (or not) > when > >>>> run over functionally equivalent source using same compilation > options. > >>>> > >>>> I'm trying to understand why a syslog call using a format of "%08x" > and > >>>> an argument of uint32_t doesn't cause a format warning when built > using > >>>> arm-none-eabi-gcc (version 13.2.1 20231009) on my Ubuntu machine. > >>>> > >>>> I configured nuttx fornucelo-h743zi2:jumbo, tweaked the configuration > >>>> to enable DEBUG_IRQ_INFO, and built with V=1 to get the compiler > command > >>>> line for arch/arm/src/chip/stm32_irq.c: > >>>> > >>>> tools/configure.sh -l nucleo-h743zi2jumbo > >>>> kconfig-tweak --file .config -e DEBUG_IRQ_INFO > >>>> make V=1 -j $(nproc) > >>>> > >>>> Then chdir into arch/arm/src and generate preprocessed source of > >>>> chip/stm32_irq.c into /tmp/stm32_irq.c using the complication command > >>>> from the build: > >>>> > >>>> cd arch/arm/src > >>>> # setup BASE_DIR to root of nuttx tree > >>>> BASE_DIR=/home/peter/git/nuttx/github/nucleo-h743zi2-warnings/nuttx > >>>> # setup COMPILER_OPTIONS for what gets passed to gcc > >>>> COMPILER_OPTIONS="-Wstrict-prototypes -Wno-attributes > -Wno-unknown-pragmas" \ > >>>> " -Wno-psabi -Os -fno-strict-aliasing -fomit-frame-pointer" \ > >>>> " --param=min-pagesize=0 -fno-common -Wall -Wshadow -Wundef" \ > >>>> " -ffunction-sections -fdata-sections "-g" -mlittle-endian" \ > >>>> " -march=armv7e-m -mtune=cortex-m7 -mfpu=fpv5-d16 > -mfloat-abi=hard" \ > >>>> " -mthumb -Wa,-mthumb -Wa,-mimplicit-it=always -isystem" > >>>> > >>>> # Generate /tmp/stm32_irq.c from chip/stm32_irq.c > >>>> arm-none-eabi-gcc -E $COMPILER_OPTIONS $BASE_DIR/include -D__NuttX__ \ > >>>> -DNDEBUG -D__KERNEL__ -I $BASE_DIR/arch/arm/src/chip \ > >>>> -I $BASE_DIR/arch/arm/src/common -I > $BASE_DIR/arch/arm/src/armv7-m \ > >>>> -I $BASE_DIR/sched chip/stm32_irq.c -o /tmp/stm32_irq.c > >>>> > >>>> # Compile the result file using same compiler options: > >>>> arm-none-eabi-gcc -E $COMPILER_OPTIONS $BASE_DIR/include -D__NuttX__ \ > >>>> -DNDEBUG -D__KERNEL__ -I $BASE_DIR/arch/arm/src/chip \ > >>>> -I $BASE_DIR/arch/arm/src/common -I > $BASE_DIR/arch/arm/src/armv7-m \ > >>>> -I $BASE_DIR/sched chip/stm32_irq.c -o /tmp/stm32_irq.c > >>>> > >>>> # So far no errors (yes, get a preprocessow warning, can ignore) > >>>> > >>>> The above should just generate a preprofcessing warning. Now it gets > >>>> strange: > >>>> > >>>> # Remove _all_ the preprocessor generated linemarkers and compile > again: > >>>> sed -ie '/^#/d' /tmp/stm32_irq.c > >>>> > >>>> arm-none-eabi-gcc -E $COMPILER_OPTIONS $BASE_DIR/include -D__NuttX__ \ > >>>> -DNDEBUG -D__KERNEL__ -I $BASE_DIR/arch/arm/src/chip \ > >>>> -I $BASE_DIR/arch/arm/src/common -I > $BASE_DIR/arch/arm/src/armv7-m \ > >>>> -I $BASE_DIR/sched chip/stm32_irq.c -o /tmp/stm32_irq.c > >>>> > >>>> And now I see format warnings (here's the first): > >>>> > >>>> /tmp/stm32_irq.c: In function 'stm32_dumpnvic': > >>>> > >>>> /tmp/stm32_irq.c:4875:12: warning: format '%x' expects argument of > type 'unsigned int', but argument 4 has type 'uint32_t' {aka 'long unsigned > int'} [-Wformat=] > >>>> 4875 | syslog(6, "%s: " > >>>> | ^~~~~~ > >>>> ...... > >>>> 4878 | getreg32((0xe000e000 + 0x0d04)), getreg32((0xe000e000 + > 0x0d08)) > >>>> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > >>>> | | > >>>> | uint32_t {aka long unsigned int} > >>>> /tmp/stm32_irq.c:4876:20: note: format string is defined here > >>>> 4876 | " INTCTRL: %08x VECTAB: %08x\n" > >>>> | ~~~^ > >>>> | | > >>>> | unsigned int > >>>> | %08lx > >>>> > >>>> Could someone who builds stm32 on Ubuntu try out above commands > >>>> (changing BASE_DIR to match your tree) and tell me if you see same > >>>> results where format warnings magically appear? Any ideas why gcc > >>>> generates format warnings over same source - only after removing all > the > >>>> preprocessor linemarkers? > >>>> > >>>> Thanks in advance! > >>>> > >>>> -- > >>>> Peter Barada > >>>> [email protected] > >> -- > >> Peter Barada > >> [email protected] > > -- > > Peter Barada > > [email protected] > > -- > Peter Barada > [email protected] >
