https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89223
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Started with r210113. int_cst_value changed there: /* Make sure the sign-extended value will fit in a HOST_WIDE_INT. */ - gcc_assert (TREE_INT_CST_HIGH (x) == 0 - || TREE_INT_CST_HIGH (x) == -1); + gcc_assert (cst_and_fits_in_hwi (x)); which is not equivalent, as previously it wasn't testing whether it has signed or unsigned type, now it is. With a small modification: int a[9]; unsigned __int128 b; void foo (void) { for (b = (((unsigned __int128) 4) << 64) + 4; b != 0; b -= ((((unsigned __int128) 1) << 64) + 1)) a[b] = a[b + b]; } (where it relies on sizetype/pointers being at most 64-bit), it started to ICE with r159879 when __int128 support has been introduced.