Open
Description
First of all, this is not reproducible on the develop
branch as of writing this.
How to reproduce (on the current master):
$ git clone https://github.com/eyalroz/printf.git
$ cd printf/
$ gcc -c -o /dev/null -Wall -Isrc src/printf/printf.c -Ofast
Yielding the output:
In function ‘apply_scaling’,
inlined from ‘get_normalized_components’ at src/printf/printf.c:706:29,
inlined from ‘print_exponential_number’ at src/printf/printf.c:964:5:
src/printf/printf.c:658:66: warning: ‘normalization.raw_factor’ may be used uninitialized [-Wmaybe-uninitialized]
658 | return normalization.multiply ? num * normalization.raw_factor : num / normalization.raw_factor;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/printf/printf.c: In function ‘print_exponential_number’:
src/printf/printf.c:904:25: note: ‘normalization.raw_factor’ was declared here
904 | struct scaling_factor normalization;
| ^~~~~~~~~~~~~
I've only seen this on GCC 13.2 (no warning on 9, 11, nor 12), compiling for/on x86-64.
If one doesn't need support for the specifiers %[egEG]
, the easiest way to work around it is to add -DPRINTF_SUPPORT_EXPONENTIAL_SPECIFIERS=0
when compiling.