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

Zhendong Su <zhendong.su at inf dot ethz.ch> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|wrong code at -O2 and -O3   |wrong code at -O2 and -O3
                   |with "on x86_64-linux-gnu   |with
                   |                            |"-fsel-sched-pipelining
                   |                            |-fselective-scheduling2" on
                   |                            |x86_64-linux-gnu

--- Comment #1 from Zhendong Su <zhendong.su at inf dot ethz.ch> ---
It appears to be a regression from 11.*, and affects 12.* and later.

Compiler Explorer: https://godbolt.org/z/WEhzh66Pz

[571] % gcctk -v
Using built-in specs.
COLLECT_GCC=gcctk
COLLECT_LTO_WRAPPER=/local/home/suz/suz-local/software/local/gcc-trunk/bin/../libexec/gcc/x86_64-pc-linux-gnu/14.0.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--enable-checking=yes --prefix=/local/suz-local/software/local/gcc-trunk
--enable-sanitizers --enable-languages=c,c++ --disable-werror
--disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 14.0.0 20230623 (experimental) [master r14-924-gd709841ae0f] (GCC) 
[572] % 
[572] % gcctk -O3 -fsel-sched-pipelining -fselective-scheduling2 -fPIC small.c
[573] % ./a.out
Floating point exception
[574] % 
[574] % gcctk -O3 small.c; ./a.out
[575] % 
[575] % cat small.c
int printf(const char *, ...);
int a, d, b, i = 2, e;
static unsigned c = 1;
char f, g = 1;
void j() {
k:
  if (b)
    for (;;)
      __builtin_abort();
  unsigned l = i && 2 / c * d % g;
  if (a) {
    l = c;
    g = i;
    if (d > 1) {
      printf("%d", c);
      goto k;
    }
  }
  a = c = l;
}
int main() {
  a = -2;
  j();
  i = 0;
  f = ~c;
  if (f > 0) {
    printf("%d", f);
    a = 2 % i;
  }
  return 0;
}

Reply via email to