1 /* PR tree-optimization/65369 */
2 #include <stdint.h>
3 
4 static const char data[] =
5   "12345678901234567890123456789012345678901234567890"
6   "123456789012345678901234567890";
7 
8 __attribute__ ((noinline))
foo(const unsigned int * buf)9 static void foo (const unsigned int *buf)
10 {
11   if (__builtin_memcmp (buf, data, 64))
12     __builtin_abort ();
13 }
14 
15 __attribute__ ((noinline))
bar(const unsigned char * block)16 static void bar (const unsigned char *block)
17 {
18   uint32_t buf[16];
19   __builtin_memcpy (buf +  0, block +  0, 4);
20   __builtin_memcpy (buf +  1, block +  4, 4);
21   __builtin_memcpy (buf +  2, block +  8, 4);
22   __builtin_memcpy (buf +  3, block + 12, 4);
23   __builtin_memcpy (buf +  4, block + 16, 4);
24   __builtin_memcpy (buf +  5, block + 20, 4);
25   __builtin_memcpy (buf +  6, block + 24, 4);
26   __builtin_memcpy (buf +  7, block + 28, 4);
27   __builtin_memcpy (buf +  8, block + 32, 4);
28   __builtin_memcpy (buf +  9, block + 36, 4);
29   __builtin_memcpy (buf + 10, block + 40, 4);
30   __builtin_memcpy (buf + 11, block + 44, 4);
31   __builtin_memcpy (buf + 12, block + 48, 4);
32   __builtin_memcpy (buf + 13, block + 52, 4);
33   __builtin_memcpy (buf + 14, block + 56, 4);
34   __builtin_memcpy (buf + 15, block + 60, 4);
35   foo (buf);
36 }
37 
38 int
main()39 main ()
40 {
41   unsigned char input[sizeof data + 16] __attribute__((aligned (16)));
42   __builtin_memset (input, 0, sizeof input);
43   __builtin_memcpy (input + 1, data, sizeof data);
44   bar (input + 1);
45   return 0;
46 }
47