https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109002
Bug ID: 109002 Summary: -O1 -ftree-pre -ftree-partial-pre results in stall value Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: akihiko.odaki at daynix dot com Target Milestone: --- The following should emit an executable which prints "a" forever, but the actual compiled executable prints nothing and just hangs. It seems the code sees a stall value of variable g. gcc -O1 -ftree-pre -ftree-partial-pre -x c - <<EOF #include <stdio.h> int g; int h; int main(void) { for (int i = 0; ; i++) { for (int j = 0; j < g; j++); if (i & 1) { if (h) continue; if (g) puts("a"); g = 1; } } } EOF I reproduced this bug with the current master. gcc -v says: Using built-in specs. COLLECT_GCC=/home/alarm/gcc-installation/usr/local/bin/gcc COLLECT_LTO_WRAPPER=/home/alarm/gcc-installation/usr/local/bin/../libexec/gcc/aarch64-unknown-linux-gnu/13.0.1/lto-wrapper Target: aarch64-unknown-linux-gnu Configured with: ../gcc/configure --disable-bootstrap : (reconfigured) ../gcc/configure --disable-bootstrap Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 13.0.1 20230302 (experimental) (GCC) COLLECT_GCC_OPTIONS='-v' '-mlittle-endian' '-mabi=lp64' /home/alarm/gcc-installation/usr/local/bin/../libexec/gcc/aarch64-unknown-linux-gnu/13.0.1/cc1 -quiet -v -iprefix /home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/ /home/alarm/a.c -quiet -dumpbase a.c -dumpbase-ext .c -mlittle-endian -mabi=lp64 -version -o /tmp/ccetU9yt.s GNU C17 (GCC) version 13.0.1 20230302 (experimental) (aarch64-unknown-linux-gnu) compiled by GNU C version 12.1.0, GMP version 6.2.1, MPFR version 4.2.0, MPC version 1.3.1, isl version isl-0.25-GMP GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 ignoring nonexistent directory "/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/../../../../aarch64-unknown-linux-gnu/include" ignoring duplicate directory "/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/../../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/include" ignoring duplicate directory "/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/../../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/include-fixed" ignoring nonexistent directory "/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/../../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/../../../../aarch64-unknown-linux-gnu/include" #include "..." search starts here: #include <...> search starts here: /home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/include /home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/include-fixed /usr/local/include /usr/include End of search list. Compiler executable checksum: 374b2759695ed1b72f52cb0f1847fbb3 COLLECT_GCC_OPTIONS='-v' '-mlittle-endian' '-mabi=lp64' as -v -EL -mabi=lp64 -o /tmp/ccTu98hj.o /tmp/ccetU9yt.s GNU assembler version 2.38 (aarch64-unknown-linux-gnu) using BFD version (GNU Binutils) 2.38 COMPILER_PATH=/home/alarm/gcc-installation/usr/local/bin/../libexec/gcc/aarch64-unknown-linux-gnu/13.0.1/:/home/alarm/gcc-installation/usr/local/bin/../libexec/gcc/ LIBRARY_PATH=/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/:/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/:/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/../../../../lib64/:/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-mlittle-endian' '-mabi=lp64' '-dumpdir' 'a.' /home/alarm/gcc-installation/usr/local/bin/../libexec/gcc/aarch64-unknown-linux-gnu/13.0.1/collect2 -plugin /home/alarm/gcc-installation/usr/local/bin/../libexec/gcc/aarch64-unknown-linux-gnu/13.0.1/liblto_plugin.so -plugin-opt=/home/alarm/gcc-installation/usr/local/bin/../libexec/gcc/aarch64-unknown-linux-gnu/13.0.1/lto-wrapper -plugin-opt=-fresolution=/tmp/ccup8iGA.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --eh-frame-hdr -dynamic-linker /lib/ld-linux-aarch64.so.1 -X -EL -maarch64linux /lib/crt1.o /lib/crti.o /home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/crtbegin.o -L/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1 -L/home/alarm/gcc-installation/usr/local/bin/../lib/gcc -L/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/../../../../lib64 -L/home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/../../.. /tmp/ccTu98hj.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /home/alarm/gcc-installation/usr/local/bin/../lib/gcc/aarch64-unknown-linux-gnu/13.0.1/crtend.o /lib/crtn.o COLLECT_GCC_OPTIONS='-v' '-mlittle-endian' '-mabi=lp64' '-dumpdir' 'a.' git bisect revealed this is a regression caused by commit 5edf02ed2b6de024f83a023d046a6a18f645bc83.