I wrote a loop that figures out how many items are in a list,
counts down from that count to -1, changes direction and counts
up from 0 to the limit, a la:
inc = -1;
int idx = 0;
while (opts->papzHomeList[idx+1] != NULL)
idx++;
for (;;) {
if (idx < 0) { <<<=== line 1025
inc = 1;
idx = 0;
}
char const * path = opts->papzHomeList[ idx ];
if (path == NULL)
break;
idx += inc;
// do a bunch of stuff
}
../../autoopts/configfile.c: In function 'intern_file_load':
../../autoopts/configfile.c:1025:12: error: assuming signed overflow does not
occur \
when simplifying conditional to constant [-Werror=strict-overflow]
I do not think GCC should be "simplifying" the expression "idx < 0" to a
constant.
The number of entries in "papzHomeList" is known to be less than INT_MAX (64K
actually),
but not by the code in question. My guess is that some code somewhere presumes
that "idx" never gets decremented. Not true.