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

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Slightly cleaned up:
unsigned short a, c, d;

short
foo (short g, short h)
{
  return h;
}

short
bar (short g, short h)
{
  return g;
}

__attribute__((noipa)) void
baz (...)
{
  __builtin_abort ();
}

__attribute__((noinline)) int
qux (signed char g)
{
  unsigned short j;
  int b = 0, k;
  while (d < 8)
    {
      if ((b = a != g) ^ a)
        {
          j = b + a;
          k = j;
          return a ? 0 : k >> a;
        }
      b = foo (d && c, a);
    }
  baz (b);
  return 100;
}

__attribute__((noinline)) int
fred (signed char g)
{
  unsigned short j;
  int b = 0, k;
  while (d < 8)
    {
      if ((b = a != g) ^ a)
        {
          j = b + a;
          k = j;
          return a ? 0 : k >> a;
        }
      b = bar (a, d && c);
    }
  baz (b);
  return 100;
}

int
main ()
{
  if (qux (1) != 1 || fred (1) != 1)
    __builtin_abort ();
}

Reply via email to