| /* PR rtl-optimization/63843 */ |
| |
| static inline __attribute__ ((always_inline)) |
| unsigned short foo (unsigned short v) |
| { |
| return (v << 8) | (v >> 8); |
| } |
| |
| unsigned short __attribute__ ((noinline, noclone, hot)) |
| bar (unsigned char *x) |
| { |
| unsigned int a; |
| unsigned short b; |
| __builtin_memcpy (&a, &x[0], sizeof (a)); |
| a ^= 0x80808080U; |
| __builtin_memcpy (&x[0], &a, sizeof (a)); |
| __builtin_memcpy (&b, &x[2], sizeof (b)); |
| return foo (b); |
| } |
| |
| int |
| main () |
| { |
| unsigned char x[8] = { 0x01, 0x01, 0x01, 0x01 }; |
| if (__CHAR_BIT__ == 8 |
| && sizeof (short) == 2 |
| && sizeof (int) == 4 |
| && bar (x) != 0x8181U) |
| __builtin_abort (); |
| return 0; |
| } |