[Bug tree-optimization/79721] New: Scalar evolution introduces signed overflow

krister.walfridsson at gmail dot com gcc-bugzilla@gcc.gnu.org
Sun Feb 26 23:38:00 GMT 2017


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

            Bug ID: 79721
           Summary: Scalar evolution introduces signed overflow
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: krister.walfridsson at gmail dot com
  Target Milestone: ---

The function

  int foo(int a, int b)
  {
    int sum = 0;
    for (int i = 0; i < 60000; i++)
      {
        sum += a + i * b;
      }
    return sum;
  }

is transformed to

  int _11;
  int _12;
  int _13;
  int _16;

  [...]

  _16 = b_7(D) + a_8(D);
  _13 = _16 * 59999;
  _12 = b_7(D) * 1799910001;
  _11 = _12 + _13;
  sum_17 = _11 + a_8(D);
  return sum_17;

by scalar evolution when compiled as "gcc -O3 -c bug.c".  The original function
could calculate foo(-30000, 2) without any signed integer overflow, but the
transformed function will overflow in the multiplication _12.


More information about the Gcc-bugs mailing list