https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113734
--- Comment #24 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
The case I thought would go wrong with the above fix is:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define N 306
#define NEEDLE 135
__attribute__ ((noipa, noinline))
int use(int x[N])
{
printf("res=%d\n", x[NEEDLE]);
return x[NEEDLE];
}
__attribute__ ((noipa, noinline))
int foo (int i, unsigned short parse_tables_n)
{
int table[N];
memset (table, -1, sizeof (table));
parse_tables_n >>= 9;
parse_tables_n += 9;
while (i < N && parse_tables_n--)
table[i++] = 0;
return use (table);
}
int main ()
{
if (foo (0, 0xFFFF) != 0)
abort ();
return 0;
}
---
but this seems fine because of the bias_for_lowest which I now understand to be
there to account for this.
So starting a regtest for that patch.