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

            Bug ID: 106025
           Summary: Incorrect optimization at -O2 leads to infinite test
                    execution time
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vsevolod.livinskiy at gmail dot com
  Target Milestone: ---

The GCC incorrectly optimizes the code, which leads to infinite (or very large)
execution time.
Unfortunately, I was not able to merge the reproducer into a single file.

This error was discovered by a fuzzer. If you think that it is not valuable or
relevant, feel free to close the bug report.

Error:
>$ g++ -O1 func.cpp driver.cpp && time ./a.out 
4294965301

real    0m0.001s
user    0m0.001s
sys     0m0.000s

>$ g++ -O2 func.cpp driver.cpp && time ./a.out 
^C
real    160m11.604s
user    160m10.790s
sys     0m0.000s

Reproducer:
//driver.cpp
#include <stdio.h>

short var_1 = (short)-1995;
unsigned short var_8 = (unsigned short)22379;
unsigned long long int var_154;
unsigned char var_355 = 3;
short var_371 = 27541;
short var_385 = 29482;
short var_401;


void test(short var_1, unsigned short var_8, unsigned char *var_355, short
*var_371 , short var_385);

int main() {
  test(var_1, var_8, &var_355, &var_371, var_385);
  printf("%llu\n", var_154);
}

//func.cpp
extern int var_154;
extern short var_401;
const unsigned short &min(const unsigned short &b, unsigned short &c) {
  return b < c ? b : c;
}
const unsigned short &max(const unsigned short &b, const unsigned short &c) {
  return b > c ? b : c;
}
void test(short var_1, unsigned short var_8,
          unsigned char *var_355, short *var_371, short var_385) {
  var_154 = var_1;
  for (short i = 0; i < (short)max(var_1, min(*var_355, var_8)) + 7; i =
var_385)
    var_401 = *var_371 ? *var_371 : 5;
}


gcc version 13.0.0 20220618 (479b6f449ee999501ad6eff0b7db8d0cd5b2d28d)

Reply via email to