1 // Test for oversized bitfield alignment in structs on IA-32
2 // { dg-do run { target i?86-*-* } }
3 // { dg-options "-O2" }
4 
5 struct A
6 {
7   char a;
8   int b : 224;	// { dg-warning "exceeds its type" "" }
9   char c;
10 } a, a4[4];
11 
12 struct B
13 {
14   char d;
15   A e;
16   char f;
17 } b;
18 
19 struct C
20 {
21   char g;
22   long long h : 64;
23   char i;
24 } c, c4[4];
25 
26 struct D
27 {
28   char j;
29   C k;
30   char l;
31 } d;
32 
33 struct E
34 {
35   char m;
36   long long n : 160;	// { dg-warning "exceeds its type" "" }
37   char o;
38 } e, e4[4];
39 
40 struct F
41 {
42   char p;
43   E q;
44   char r;
45 } f;
46 
47 int main (void)
48 {
49   if (&a.c - &a.a != 32)
50     return 1;
51   if (sizeof (a) != 36)
52     return 2;
53   if (sizeof (a4) != 4 * 36)
54     return 3;
55   if (sizeof (b) != 2 * 4 + 36)
56     return 4;
57   if (__alignof__ (b.e) != 4)
58     return 5;
59   if (&c.i - &c.g != 12)
60     return 6;
61   if (sizeof (c) != 16)
62     return 7;
63   if (sizeof (c4) != 4 * 16)
64     return 8;
65   if (sizeof (d) != 2 * 4 + 16)
66     return 9;
67   if (__alignof__ (d.k) != 4)
68     return 10;
69   if (&e.o - &e.m != 24)
70     return 11;
71   if (sizeof (e) != 28)
72     return 12;
73   if (sizeof (e4) != 4 * 28)
74     return 13;
75   if (sizeof (f) != 2 * 4 + 28)
76     return 14;
77   if (__alignof__ (f.q) != 4)
78     return 15;
79   return 0;
80 }
81