https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111151
Bug ID: 111151 Summary: [12/13/14 Regression] Wrong code at -O0 on x86_64-pc-linux-gnu Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: jwzeng at nuaa dot edu.cn Target Milestone: --- Link to the Compiler Explorer: https://godbolt.org/z/MY4Er6b3e The following code snippet, gcc at -O0 produces the wrong code. I also compiled this code with almost all versions up to and including gcc-13 and got the same error. $ cat test.c int printf(const char *, ...); short t = -32166; unsigned long long int a, b, c; int main() { a = 32739 > t + 4503599ULL ? 32739 : t + 4503599ULL; b = -10 * a; printf("%llu (Split calculation result)\n", b); c = -10 * (32739 > t + 4503599ULL ? 32739 : t + 4503599ULL); printf("%llu (Combine calculation result)\n", c); } $ $ gcc-tk test.c; ./a.out 18446744073664837286 (Split calculation result) 18446744073709224226 (Combine calculation result) $ $ clang-tk test.c; ./a.out 18446744073664837286 (Split calculation result) 18446744073664837286 (Combine calculation result) $ $ ccomp test.c; ./a.out 18446744073664837286 (Split calculation result) 18446744073664837286 (Combine calculation result) $ $ gcc-tk --version gcc (GCC) 14.0.0 20230823 (experimental) [master r14-3395-g6cd8527307] $ $ clang-tk --version Ubuntu clang version 18.0.0 (++20230821052626+634b2fd2cac2-1~exp1~20230821172748.738) $ $ ccomp --version The CompCert C verified compiler, version 3.12