http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55079
--- Comment #9 from Jan Hubicka <hubicka at gcc dot gnu.org> 2012-11-15
01:01:30 UTC ---
This is reduced testcase from gcov.c
int a[8];
int
t (void)
{
int ix = 0;
int k;
int b = 0;
int curr = 0;
for (k = 0; k < 2; k++)
{
b = ix * 32;
curr = a[ix++];
if (!(ix <= 8))
abort ();
while (curr)
{
b = ix * 32;
curr = a[ix++];
if (!(ix <= 8))
abort ();
}
}
return curr + b;
}
jan@linux-e0ml:~/trunk/build/gcc> ./xgcc -B ./ -O2 -fprofile-use t.c
-Warray-bounds -S -S -fdump-tree-cunroll-details -fdump-tree-all-details
t.c: In function ‘t’:
t.c:14:2: warning: incompatible implicit declaration of built-in function
‘abort’ [enabled by default]
abort ();
^
t.c:25:1: note: file /home/jan/trunk/build/gcc/t.gcda not found, execution
counts estimated
}
^
t.c:19:15: warning: array subscript is above array bounds [-Warray-bounds]
curr = a[ix++];
^
t.c:19:15: warning: array subscript is above array bounds [-Warray-bounds]
Obivously here unroller does not know that bv_ix is at least 1