Alan,
I'm on the CC list for the bug; its stranger than that. Looks like need
-Wsystem-headers. Who knew? :)
On 2/24/26 14:44, Alan C. Assis wrote:
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]
--
Peter Barada
[email protected]