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();
}

Reply via email to