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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #15 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Slightly cleaned up; aborts with -O3 -ftrivial-auto-var-init=zero,
doesn't abort with -O0, -O3 or -O0 -ftrivial-auto-var-init=zero.

int m[256];
unsigned n = 4294967295;

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);
  foo (x >> 24);
  foo (x >> 32);
  foo (x >> 40);
  foo (x >> 48);
  foo (x >> 56);
}

int a = -8, c, e, f, g, i;
short b;
static int *d = &c;
unsigned h;

int
main ()
{
  if (__CHAR_BIT__ != 8 || __SIZEOF_SHORT__ != 2 || __SIZEOF_INT__ != 4)
    return 0;
  for (; g < 256; g++)
    {
      h = g;
      for (i = 8; i; i--)
        if (h & 1)
          h = (h >> 1) ^ 3988292384;
        else
          h >>= 1;
      m[g] = h;
    }
  b = 53935 & a;
  a = -18;
  for (c = 1; c >= 0; c -= 1)
    {
      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 != 0xbd51857cU)
    __builtin_abort ();
}

The only difference between -O3 and -O3 -ftrivial-auto-var-init=zero in gimple
dump
is the addition of
            k = .DEFERRED_INIT (2, 2, &"k"[0]);
where k is otherwise unused variable.

Reply via email to