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.

Reply via email to