https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98773

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
Ok, so it's eventually a multilib building (--enable-targets=all) though the
errors sound like frontend errors ...

But if just the tree-data-ref.c hunk is enough to trigger it then it
hints at an issue with

+         if (!tree_fits_shwi_p (CHREC_RIGHT (chrec)))
+           return chrec_dont_know;
+         chrec_right = tree_to_shwi (CHREC_RIGHT (chrec));

which will interpret -1U as -1U instead of -1 for unsigned CHRECs.  It will
treat { 0, +, 255 } (all unsigned char) plain instead of re-interpreting
it as { 0, +, -1 }, maybe that was a wrong "fix".

I have a testcase, -O3 -m32 fails:

char a[128];

void __attribute__((noipa))
foo ()
{
  for (unsigned i = 27; i >= 5; --i)
    a[i] = a[i-5];
}

int main()
{
  __builtin_memcpy (a, "Hello World", sizeof ("Hello World"));
  foo ();
  if (__builtin_memcmp (a + 5, "Hello World", sizeof ("Hello World")) != 0)
    __builtin_abort ();
  return 0;
}

Reply via email to