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.