/* PR tree-optimization/65369 */ #include static const char data[] = "12345678901234567890123456789012345678901234567890" "123456789012345678901234567890"; __attribute__ ((noinline)) static void foo (const unsigned int *buf) { if (__builtin_memcmp (buf, data, 64)) __builtin_abort (); } __attribute__ ((noinline)) static void bar (const unsigned char *block) { uint32_t buf[16]; __builtin_memcpy (buf + 0, block + 0, 4); __builtin_memcpy (buf + 1, block + 4, 4); __builtin_memcpy (buf + 2, block + 8, 4); __builtin_memcpy (buf + 3, block + 12, 4); __builtin_memcpy (buf + 4, block + 16, 4); __builtin_memcpy (buf + 5, block + 20, 4); __builtin_memcpy (buf + 6, block + 24, 4); __builtin_memcpy (buf + 7, block + 28, 4); __builtin_memcpy (buf + 8, block + 32, 4); __builtin_memcpy (buf + 9, block + 36, 4); __builtin_memcpy (buf + 10, block + 40, 4); __builtin_memcpy (buf + 11, block + 44, 4); __builtin_memcpy (buf + 12, block + 48, 4); __builtin_memcpy (buf + 13, block + 52, 4); __builtin_memcpy (buf + 14, block + 56, 4); __builtin_memcpy (buf + 15, block + 60, 4); foo (buf); } int main () { unsigned char input[sizeof data + 16] __attribute__((aligned (16))); __builtin_memset (input, 0, sizeof input); __builtin_memcpy (input + 1, data, sizeof data); bar (input + 1); return 0; }