]>
Commit | Line | Data |
---|---|---|
ad9335eb | 1 | // Test for bitfield alignment in structs on IA-32 |
ac3b8691 | 2 | // { dg-do run } |
dbbb299a | 3 | // { dg-require-effective-target ia32 } |
ad9335eb | 4 | // { dg-options "-O2" } |
ee2499b4 | 5 | // { dg-options "-mno-align-double -mno-ms-bitfields" { target i?86-*-cygwin* i?86-*-mingw*} } |
ad9335eb JJ |
6 | |
7 | extern void abort (void); | |
8 | extern void exit (int); | |
9 | ||
10 | struct A | |
11 | { | |
12 | char a; | |
13 | long long b : 61; | |
14 | char c; | |
15 | } a, a4[4]; | |
16 | ||
17 | struct B | |
18 | { | |
19 | char d; | |
20 | struct A e; | |
21 | char f; | |
22 | } b; | |
23 | ||
24 | struct C | |
25 | { | |
26 | char g; | |
27 | union U | |
28 | { | |
29 | char u1; | |
30 | long long u2; | |
31 | long long u3 : 64; | |
32 | } h; | |
33 | char i; | |
34 | } c; | |
35 | ||
36 | int main (void) | |
37 | { | |
38 | if (&a.c - &a.a != 12) | |
39 | abort (); | |
40 | if (sizeof (a) != 16) | |
41 | abort (); | |
42 | if (sizeof (a4) != 4 * 16) | |
43 | abort (); | |
44 | if (sizeof (b) != 2 * 4 + 16) | |
45 | abort (); | |
46 | if (__alignof__ (b.e) != 4) | |
47 | abort (); | |
48 | if (&c.i - &c.g != 12) | |
49 | abort (); | |
50 | if (sizeof (c) != 16) | |
51 | abort (); | |
52 | if (__alignof__ (c.h) != 4) | |
53 | abort (); | |
54 | exit (0); | |
55 | } |