]>
Commit | Line | Data |
---|---|---|
f5d4f18c SL |
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 | } |