1// Test for bitfield alignment in structs on IA-32
2// { dg-do run }
3// { dg-require-effective-target ilp32 }
4// { dg-options "-O2" }
5// { dg-options "-mno-align-double -mno-ms-bitfields" { target i?86-*-interix* i?86-*-cygwin* i?86-*-mingw*} }
6
7extern void abort (void);
8extern void exit (int);
9
10struct A
11{
12  char a;
13  long long b : 61;
14  char c;
15} a, a4[4];
16
17struct B
18{
19  char d;
20  struct A e;
21  char f;
22} b;
23
24struct 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
36int 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}
56