* expmed.c (flip_storage_order): Deal with complex modes specially.
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / pr65401.c
blobcf8c75323558f72f429fc1b3394fc0876c9824a5
1 /* PR rtl-optimization/65401 */
2 /* { dg-skip-if "requires default endianness" { *-*-* } "-fsso-struct=*" "" } */
4 struct S { unsigned short s[64]; };
6 __attribute__((noinline, noclone)) void
7 foo (struct S *x)
9 unsigned int i;
10 unsigned char *s;
12 s = (unsigned char *) x->s;
13 for (i = 0; i < 64; i++)
14 x->s[i] = s[i * 2] | (s[i * 2 + 1] << 8);
17 __attribute__((noinline, noclone)) void
18 bar (struct S *x)
20 unsigned int i;
21 unsigned char *s;
23 s = (unsigned char *) x->s;
24 for (i = 0; i < 64; i++)
25 x->s[i] = (s[i * 2] << 8) | s[i * 2 + 1];
28 int
29 main ()
31 unsigned int i;
32 struct S s;
33 if (sizeof (unsigned short) != 2)
34 return 0;
35 for (i = 0; i < 64; i++)
36 s.s[i] = i + ((64 - i) << 8);
37 foo (&s);
38 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
39 for (i = 0; i < 64; i++)
40 if (s.s[i] != (64 - i) + (i << 8))
41 __builtin_abort ();
42 #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
43 for (i = 0; i < 64; i++)
44 if (s.s[i] != i + ((64 - i) << 8))
45 __builtin_abort ();
46 #endif
47 for (i = 0; i < 64; i++)
48 s.s[i] = i + ((64 - i) << 8);
49 bar (&s);
50 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
51 for (i = 0; i < 64; i++)
52 if (s.s[i] != (64 - i) + (i << 8))
53 __builtin_abort ();
54 #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
55 for (i = 0; i < 64; i++)
56 if (s.s[i] != i + ((64 - i) << 8))
57 __builtin_abort ();
58 #endif
59 return 0;