https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121522
Bug ID: 121522 Summary: wrong code at -O3 on x86_64-linux-gnu (the generated code hangs) Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: zhendong.su at inf dot ethz.ch Target Milestone: --- Compiler Explorer: https://godbolt.org/z/K7csr9qM7 Note: - fails: 14.* and later - works: 13.* and earlier - -fno-tree-slsr makes it disappear [537] % gcctk -v Using built-in specs. COLLECT_GCC=gcctk COLLECT_LTO_WRAPPER=/local/home/suz/suz-local/software/local/gcc-trunk/bin/../libexec/gcc/x86_64-pc-linux-gnu/16.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-trunk/configure --disable-bootstrap --enable-checking=yes --prefix=/local/suz-local/software/local/gcc-trunk --enable-sanitizers --enable-languages=c,c++ --disable-werror --enable-multilib Thread model: posix Supported LTO compression algorithms: zlib gcc version 16.0.0 20250812 (experimental) (GCC) [538] % [538] % gcctk -O2 small.c [539] % ./a.out [540] % [540] % gcctk -O3 small.c [541] % timeout -s 9 5 ./a.out Killed [542] % cat small.c int a[] = { 0, 1996959894, 3993919788, 4, 7, 5, 3915621685, 2657392035, 4, 2044508324, 0, 2547177864, 5, 1, 7, 4049, 498536548, 6, 4089016648, 4, 50548861, 3, 107580753, 2211677639, 0, 2, 2, 2321926636, 7, 5, 4195302755, 7, 997073096, 6, 2, 2, 1006888145, 607687, 3524101629, 2768942443, 901097722, 9000684, 6, 8065728, 853044451, 1172266101, 705015759, 2882616665, 651767980, 6, 4, 3218104598, 3, 1, 3485111705, 3099436303, 671266974, 4, 30930, 70347812, 795835527, 5, 3244367275, 3060149565, 1994146192, 31158534, 2, 4023717930, 1907459465, 5, 3, 3904427059, 2013776290, 6, 4, 0, 3, 141376813, 9, 3865271297, 802195444, 6, 8001368, 4066508878, 70925, 3092731, 5, 4111451223, 706088902, 314042704, 2, 2, 1658658271, 7, 3, 4224994405, 303535960, 6, 7007092, 9037538, 70817, 1, 3, 3554079995, 1131014506, 6, 2909243462, 6, 7, 7, 2852801631, 708648649, 8, 6, 6048, 3373015174, 909, 5, 3110523913, 3462522015, 4, 702138776, 2966460450, 3352799412, 504918807, 783551873, 3082640443, 3233442989, 3988292384, 6, 62317068, 10842, 5, 1, 70997, 1943803523, 3814918930, 2489596804, 0, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 90386, 2, 2050814, 5, 2154129355, 426522225, 507879, 4275313526, 0, 6, 2, 708143, 2394877945, 397917763, 1622183637, 604390888, 2714866558, 953729732, 1340076626, 3518719985, 60999, 1068828381, 1219638859, 3624741850, 8, 906185462, 1090812512, 3747672003, 2825379669, 5, 1181335161, 4, 3160834842, 628085408, 6, 109, 8078467, 3, 400815, 3317316542, 608, 4, 6, 1, 5, 752459403, 1, 607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 3087877, 908371, 2512341634, 803740692, 2075208622, 2, 3, 3855990285, 2094854071, 198958881, 2029012, 4057260610, 2, 0, 1, 4139329115, 1, 414664567, 2282248934, 4279200368, 1711684554, 6, 405801727, 5, 1634467795, 1, 5067896, 3608007406, 1308918612, 8, 2808555105, 3, 1, 1047427035, 8, 703836, 1088359270, 0, 2847714899, 9, 1202900863, 7, 3183342108, 0, 2, 0, 3134207493, 3453421203, 9, 601450431, 3009837614, 6, 6, 4, 3020668471, 3272380065, 1510334235, 755167117}; int d(int e, char h) { return (e >> 8 & 16777215) ^ a[(e ^ h) & 255]; } int i(int e, int h[]) { int f, b = 4294967295, g = 0; for (; g < e; ++g) { int c; f = (b >> 8 & 16777215) ^ a[(b ^ h[g]) & 255]; c = f; c = d(c, h[g] >> 8); c = d(c, h[g] >> 6); c = d(c, h[g] >> 24); b = c; } b = (unsigned)(b ^ 4294967295) % 2147483647; return b; } int j(int e, int h, int k, int l, int m, int n, int p, int q, int u) { int r, s, t = -1 + k - -1; if (!p) k = 0; s = 1 - (-1 + p - 1); r = -1 - k - 1 / m + 1; int v[] = {e, t, h, s, k, l, m, n, r, p, q, u}; return i(12, v); } int main() { int e = -5, h = -805306364, k = 2147483647, l = 8, m = -536870911, n = -1342177282; int o = 0, r; v: r = -1 + h + 1 / l - 1; if (j(-3, 30, -4, -4, -4, -4, -4, 32, -4) - 445113689 - r + (j(-2, 23, -3, -3, -3, -3, -3, 22, -3) - 1062535215) * k + (j(-1, 1, -2, -2, -2, -2, -2, 1, -2) - 950633090) * n + j(-1, 1, -2, -2, -2, -2, -2, 1, -2) - 950633090 - e - 1 == 0) goto w; do { l = o; goto v; y: o = -r; } while (j(-3, 30, -4, -4, -4, -4, -4, 32, -4) + o == 0); w: r = -1 - m - -r - -1; if ((j(-2, 23, -3, -3, -3, -3, -3, 22, -3) - 1062535222) * r + o > 0) goto y; return 0; }