building this testcase with -O2 -march=athlon -Wall -fprefetch-loop-arrays
gives:
warning: array subscript is above array bounds
[...]
which, according to VRP, seems to be valid.
testcase is:
=== Cut ===
struct real_value
{
unsigned int cl:2;
unsigned int decimal:1;
unsigned long sig[5];
};
unsigned int uexp;
static void
clear_significand_below (struct real_value *r, unsigned int n)
{
int i, w = n / 32;
for (i = 0; i < w; ++i)
r->sig[i] = 0;
}
void
do_fix_trunc (struct real_value *r)
{
if (uexp < 160)
clear_significand_below (r, 160 - uexp);
}
=== Cut ===
--
Summary: array overflow warning due to incorrect loop unrolling
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mueller at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31058