https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70941
Bug ID: 70941
Summary: [5/6/7 Regression] Test miscompiled with -O2.
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: vsevolod.livinskij at frtk dot ru
Target Milestone: ---
Created attachment 38409
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38409&action=edit
Reproducer.
Test case produces incorrect result with -O2 option.
Output:
> g++ -O0 repr.cpp; ./a.out
-109
> g++ -O3 repr.cpp; ./a.out
-110
GCC version:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/export/users/vlivinsk/gcc-trunk/bin/bin/../libexec/gcc/x86_64-pc-linux-gnu/7.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /export/users/gnutester/stability/svn/trunk/configure
--prefix=/export/users/gnutester/stability/work/trunk/64/install
--enable-bootstrap=no --enable-languages=c,c++,fortran
Thread model: posix
gcc version 7.0.0 20160430 (experimental) (GCC)
Testcase:
#include <iostream>
#include <cstdlib>
char a = 0, b = 0, c = 0, d = 0;
int main() {
a = -(b - 405418259) - ((d && c) ^ 2040097152);
if (a != -109)
abort();
}