[Bug tree-optimization/53265] Warn when undefined behavior implies smaller iteration count
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Mar 12 11:48:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53265
--- Comment #17 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-03-12 11:48:09 UTC ---
Second issue is from caller-save.c (setup_save_areas), again -Werror -O2:
int a, b[53][5], c[53][5];
int bar (void);
void
foo (void)
{
int i, j, k;
for (i = 0; i < 53; i++)
for (j = 16 / (((a & 1) != 0) ? 8 : 4); j > 0; j--)
{
int d = 1;
if (b[i][j] == 0 || c[i][1] != 0)
continue;
for (k = 0; k < j; k++)
if (c[i + k][1])
{
d = 0;
break;
}
if (!d)
continue;
c[i][j] = bar ();
}
}
The problem I have in this testcase is that the undefined behavior isn't known
to happen unconditionally, b or c array content upon entry might very well
prevent it from happening. So, if we want to warn for those, we'd need to have
two levels of the warning, one enabled perhaps by default, that hopefully
shouldn't have any false positives, and one with a different wording, enabled
perhaps by -Wall or even just -Wextra that would just say that iteration N may
trigger undefined behavior. Haven't tried to find out if any target could have
problems there.
More information about the Gcc-bugs
mailing list