https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80501

            Bug ID: 80501
           Summary: [6/7/8 Regression] Wrong code w/ a signed char, a
                    shift, and a conversion to int
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: asolokha at gmx dot com
  Target Milestone: ---
            Target: x86_64-pc-linux-gnu

gcc starting from 6 apparently miscompiles the following snippet at -O1, -O2,
-Os, -O3, or -Ofast:

signed char tb = 0;

static signed char
um (int ov, int rc)
{
  return ov << rc;
}

int
main (void)
{
  return um(tb >= 0, 7) >= 1;
}

% gcc-5.4.0 -O0 henaauhf.c && ./a.out
% gcc-5.4.0 -O1 henaauhf.c && ./a.out

% x86_64-pc-linux-gnu-gcc-7.0.0-alpha20170416 -O0 henaauhf.c && ./a.out
% x86_64-pc-linux-gnu-gcc-7.0.0-alpha20170416 -O1 henaauhf.c && ./a.out
zsh: exit 1     ./a.out

Reply via email to