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

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Slightly reduced testcase:
const char *l;

__attribute__((noipa)) void
foo (const char *x, const char *y, int z)
{
  if (x != l + 1 || y != x || z)
    __builtin_abort ();
}

__attribute__((noipa)) void
bar (const char *x, char *v)
{
  const char *w = x + __builtin_strlen (x);

  while (x[0] == '*' && x < w - 1)
    x++;

  const char *y = w - 1;
  int z = 1;
  if (y >= x)
    {
      while (y - x > 0 && *y == '*')
        y--;
      z = 0;
    }
  int i = 0;
  if (z)
    v[i++] = 'a';
  v[i] = 'b';
  foo (x, y, z);
}

int
main ()
{
  char v[2] = { 0 };
  l = "**";
  bar (l, v);
}

Reply via email to