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

--- Comment #8 from acsawdey at gcc dot gnu.org ---
It looks like both gcc 7 and 8 assume that the statement 

  ptrA->sA[ptrB->int1].zt = parm1;

will only be executed 14+1 times because of the declaration sA[15].

However gcc 7 assumes the whole loop will only execute that number of times:

Statement ptrA_14(D)->sA[ptrB__int1_lsm.11_22].zt = _34;
 is executed at most 14 (bounded by 14) + 1 times in loop 1.
Analyzing # of iterations of loop 1
  exit condition [15, + , 4294967295] != 0
  bounds on difference of bases: -15 ... -15
  result:
    # of iterations 15, bounded by 15
Loop 1 iterates 15 times.
Loop 1 iterates at most 14 times.
Loop 1 likely iterates at most 14 times.
Analyzing # of iterations of loop 1
  exit condition [15, + , 4294967295] != 0
  bounds on difference of bases: -15 ... -15
  result:
    # of iterations 15, bounded by 15
Removed pointless exit: if (ivtmp_24 != 0)

were gcc8 does not:

Statement ptrA_13(D)->sA[ptrB__int1_lsm.5_22].zt = _20;
 is executed at most 14 (bounded by 14) + 1 times in loop 1.
Analyzing # of iterations of loop 1
  exit condition [15, + , 4294967295] != 0
  bounds on difference of bases: -15 ... -15
  result:
    # of iterations 15, bounded by 15
Loop 1 iterates 15 times.
Loop 1 iterates at most 15 times.
Loop 1 likely iterates at most 15 times.

Neither gcc 7 nor 8 produce any warnings for the revised test case with -Wall.

Reply via email to