https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103222
Bug ID: 103222 Summary: [12 Regression] wrong code at -O2 and above on x86_64-linux-gnu Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: haoxintu at gmail dot com Target Milestone: --- Hi all. $cat small.c #include <stdint.h> #include <stdio.h> int16_t a; static uint32_t *b ; static uint8_t func_2(); static int32_t func_1() { int16_t a = 1; func_2(0, a, a); return 0; } uint8_t func_2(uint32_t p1, uint32_t p2, uint32_t p3) { int p = 0; for (15;; a++) { for (0;;) { if (p2) break; b = &p2; return p2; } p3 = (p2 = p3, p); } return 0; } int main() { func_1(); printf("%d\n", a); return 0; } $gcc -O1 small.c ; ./a.out 2 $gcc -O2 small.c ; ./a.out 1 $gcc -O3 small.c ; ./a.out 1 $gcc -Os small.c ; ./a.out 1 $gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/home/haoxin/haoxin-data/compilers/gcc/build/libexec/gcc/x86_64-pc-linux-gnu/12.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with:../configure --prefix=/home/haoxin/haoxin-data/compilers/gcc/build/ --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --enable-multilib : (reconfigured) ../configure --prefix=/home/haoxin/haoxin-data/compilers/gcc/build/ --enable-bootstrap --enable-checking=release --enable-multilib --enable-languages=c,c++,lto --no-create --no-recursion Thread model: posix Supported LTO compression algorithms: zlib gcc version 12.0.0 20211113 (experimental) (GCC) Note that this issue only happens in the current trunk version (12.0) of GCC. Can also check in Godbolt: https://godbolt.org/z/rz7b9WxvT Thanks, Haoxin