https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114789
Bug ID: 114789 Summary: False positive -Wmaybe-uninitialized at -O2 Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: jb999 at gmx dot de Target Milestone: --- This test case produces a false positive -Wmaybe-uninitialized warning with PARTS set to 2 or higher, but not with PARTS set to 1 or at -O instead of -O2: #include <string.h> #define PARTS 2 void foo(void **); void grab (char *line) { void *item[1]; unsigned int part = 1; do { while (*line && *line == ' ') line++; if (part == 1) item[0] = line; while (*line && *line != ' ') line++; } while (++part <= PARTS); if (*line) *line++ = 0; if (strlen(item[0])) foo(item); } Output: Using built-in specs. COLLECT_GCC=/tmp/gcc14/usr/bin/gcc Target: i686-pc-linux-gnu Configured with: /tmp/gcc/configure --prefix=/tmp/gcc14/usr --sysconfdir=/tmp/gcc14/etc --sharedstatedir=/tmp/gcc14/var/state --localstatedir=/tmp/gcc14/var/state --enable-shared --disable-static --disable-nls --enable-languages=c,c++ --with-system-zlib --disable-multilib Thread model: posix Supported LTO compression algorithms: zlib gcc version 14.0.1 20240416 (experimental) (GCC) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O2' '-Wuninitialized' '-c' '-mtune=generic' '-march=pentiumpro' /tmp/gcc14/usr/libexec/gcc/i686-pc-linux-gnu/14.0.1/cc1 -E -quiet -v testcase.c -mtune=generic -march=pentiumpro -Wuninitialized -O2 -fpch-preprocess -o testcase.i ignoring nonexistent directory "/usr/local/include" ignoring nonexistent directory "/tmp/gcc14/usr/lib/gcc/i686-pc-linux-gnu/14.0.1/../../../../i686-pc-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /tmp/gcc14/usr/lib/gcc/i686-pc-linux-gnu/14.0.1/include /tmp/gcc14/usr/include /tmp/gcc14/usr/lib/gcc/i686-pc-linux-gnu/14.0.1/include-fixed /usr/include End of search list. COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O2' '-Wuninitialized' '-c' '-mtune=generic' '-march=pentiumpro' /tmp/gcc14/usr/libexec/gcc/i686-pc-linux-gnu/14.0.1/cc1 -fpreprocessed testcase.i -quiet -dumpbase testcase.c -dumpbase-ext .c -mtune=generic -march=pentiumpro -O2 -Wuninitialized -version -o testcase.s GNU C17 (GCC) version 14.0.1 20240416 (experimental) (i686-pc-linux-gnu) compiled by GNU C version 14.0.1 20240416 (experimental), GMP version 6.0.0, MPFR version 3.1.3-p4, MPC version 1.0.3, isl version none GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 Compiler executable checksum: 2da1b27980967f452f520dd3eb2f4c0a testcase.c: In function 'grab': testcase.c:23:18: warning: 'item' may be used uninitialized [-Wmaybe-uninitialized] 23 | if (strlen(item[0])) foo(item); | ~~~~^~~ testcase.c:9:9: note: 'item' declared here 9 | void *item[1]; | ^~~~ COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O2' '-Wuninitialized' '-c' '-mtune=generic' '-march=pentiumpro' as -v --32 -o testcase.o testcase.s GNU assembler version 2.29.1 (i686-pc-linux-gnu) using BFD version (GNU Binutils) 2.29.1 COMPILER_PATH=/tmp/gcc14/usr/libexec/gcc/i686-pc-linux-gnu/14.0.1/:/tmp/gcc14/usr/libexec/gcc/i686-pc-linux-gnu/14.0.1/:/tmp/gcc14/usr/libexec/gcc/i686-pc-linux-gnu/:/tmp/gcc14/usr/lib/gcc/i686-pc-linux-gnu/14.0.1/:/tmp/gcc14/usr/lib/gcc/i686-pc-linux-gnu/ LIBRARY_PATH=/tmp/gcc14/usr/lib/gcc/i686-pc-linux-gnu/14.0.1/:/tmp/gcc14/usr/lib/gcc/i686-pc-linux-gnu/14.0.1/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-save-temps' '-O2' '-Wuninitialized' '-c' '-mtune=generic' '-march=pentiumpro'