https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80620
Bug ID: 80620 Summary: gcc produces wrong code with -O3 Product: gcc Version: 7.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: vsevolod.livinskij at frtk dot ru Target Milestone: --- Created attachment 41311 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41311&action=edit Reproducer. gcc produces wrong code with -O3. It fails on multiple architectures (knl, skylake-avx512 and others) Reproducer: >$ cat func.c extern const long int var_10; extern int var_43; extern int var_732; extern int var_743; extern int var_748; extern int var_999; extern unsigned long int var_751; void foo() { if (!var_10 - var_10) var_732 = var_43 = 0; else var_743 = 3UL * var_10 == 0; if (var_999 / var_10) var_748 = 0 < -var_10 + 500849970701012771 + (unsigned long)-var_10; else var_751 = 4081116982543369 & var_10; } >$ cat driver.c #include <stdio.h> const long int var_10 = -465274079317386463L; int var_43 = 856872806; int var_732 = -1940894202; int var_743 = 1718449211; int var_748 = -392681565; unsigned long int var_751 = 13521452247506316486UL; int var_999 = -13194608; extern void foo (); int main () { foo (); printf("%lu\n", var_751); return 0; } Error: >$ gcc -O3 driver.c func.c ; ./a.out 17981469994392165153 >$ gcc -O0 driver.c func.c ; ./a.out 2818598057803777 GCC revision: 247564