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

--- Comment #16 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Slightly more reduced:

int a = -8, c, e, f, g, i;
short b;
static int *d = &c;
int m[256];
unsigned n = ~0U;

void
foo (int b)
{
  n = (n >> 8) ^ m[(n ^ b) & 255];
}

void
bar (long x)
{
  n = (n >> 8) ^ m[(n ^ x) & 255];
  foo (x >> 8);
  foo (x >> 16);
}

int
main ()
{
  if (__CHAR_BIT__ != 8 || __SIZEOF_SHORT__ != 2 || __SIZEOF_INT__ != 4)
    return 0;
  for (g = 0; g < 256; g++)
    m[g] = g;
  b = 53935 & a;
  a = -18;
  for (c = 1; c >= 0; c--)
    {
      e = 0;
      for (int j = 0; j <= 3; j++)
        {
          short k[1];
          if (e)
            break;
          e ^= f;
        }
    }
  *d = 8 || 0;
  bar (a);
  bar (b);
  bar (2185655400);
  bar (c);
  if (n != 0x30)
    __builtin_abort ();
}

Reply via email to