https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103209
Bug ID: 103209 Summary: [12 Regression] wrong code at -O1 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. It seems to be a recent regression issue. $cat small.c #include <stdio.h> #include <stdint.h> int32_t a[6]; int64_t b; int32_t *c; int32_t **d = &c; int64_t *e = &b; int32_t **const *f = &d; int32_t **const **g = &f; int32_t *h(); static int16_t j(); static uint32_t k(int8_t, const int32_t *, int64_t); static uint32_t l() { int32_t *m = &a[3]; int32_t n = 0; int8_t o = 0; int32_t *p[] = {&n, &n, &n, &n}; uint32_t q[6][1][2] = {}; for (o = 0; o <= 1; o = 6) if (h(j(k(3, 0, q[2][0][0]), &n), n) == p[3]) *m = *e; return 0; } int32_t *h(uint32_t, int32_t) { return ***g; } int16_t j(uint32_t, int32_t *r) { **f = r; } uint32_t k(int8_t, const int32_t *, int64_t) { *e = 3; return 0;} int main() { int i = 0; l(); for (i = 0; i < 6; i++){ if (i == 3) printf("%d\n", a[i]); } return 0; } $gcc -O1 small.c ; ./a.out 0 $gcc -O0 small.c ; ./a.out 3 $gcc -O2 small.c ; ./a.out 3 $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 20211112 (experimental) (GCC) Thanks, Haoxin