1 /* Test volatile access to unaligned field. */
2 /* { dg-do run } */
3 /* { dg-options "-fstrict-volatile-bitfields" } */
4
5 extern void abort (void);
6
7 #define test_type unsigned short
8 #define MAGIC (unsigned short)0x102u
9
10 typedef struct s{
11 unsigned char Prefix;
12 test_type Type;
13 }__attribute((__packed__)) ss;
14
15 volatile ss v;
16 ss g;
17
18 void __attribute__((noinline))
19 foo (test_type u)
20 {
21 v.Type = u;
22 }
23
24 test_type __attribute__((noinline))
25 bar (void)
26 {
27 return v.Type;
28 }
29
30 int main()
31 {
32 test_type temp;
33 foo(MAGIC);
34 __builtin_memcpy(&g, (void *)&v, sizeof(g));
35 if (g.Type != MAGIC)
36 abort ();
37
38 g.Type = MAGIC;
39 __builtin_memcpy((void *)&v, &g, sizeof(v));
40 temp = bar();
41 if (temp != MAGIC)
42 abort ();
43 return 0;
44 }