1/* { dg-do run } */
2/* { dg-options "-O2" } */
3
4#pragma GCC optimize("no-unit-at-a-time")
5
6typedef unsigned char u8;
7typedef unsigned long long u64;
8
9static inline __attribute__((always_inline)) u64 __swab64p(const u64 *p)
10{
11 return (__builtin_constant_p((u64)(*p)) ? ((u64)( (((u64)(*p) & (u64)0x00000000000000ffULL) << 56) | (((u64)(*p) & (u64)0x000000000000ff00ULL) << 40) | (((u64)(*p) & (u64)0x0000000000ff0000ULL) << 24) | (((u64)(*p) & (u64)0x00000000ff000000ULL) << 8) | (((u64)(*p) & (u64)0x000000ff00000000ULL) >> 8) | (((u64)(*p) & (u64)0x0000ff0000000000ULL) >> 24) | (((u64)(*p) & (u64)0x00ff000000000000ULL) >> 40) | (((u64)(*p) & (u64)0xff00000000000000ULL) >> 56))) : __builtin_bswap64(*p));
12}
13
14static inline u64 wwn_to_u64(void *wwn)
15{
16 return __swab64p(wwn);
17}
18
19void __attribute__((noinline,noclone)) broken(u64* shost)
20{
21 u8 node_name[8] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
22 *shost = wwn_to_u64(node_name);
23}
24
25void __attribute__((noinline,noclone)) dummy(void)
26{
27 __builtin_abort();
28}
29
30int main(int argc, char* argv[])
31{
32 u64 v;
33
34 broken(&v);
35
36 if(v != (u64)-1)
37  __builtin_abort();
38
39 return 0;
40}
41