2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / g++.dg / abi / bitfield3.C
blobda7b92fad7f9fa0e9adaaaea843e5e6132ce8271
1 // Test for oversized bitfield alignment in structs on IA-32
2 // { dg-do run { target i?86-*-* } }
3 // { dg-options "-O2" }
5 struct A
7   char a;
8   int b : 224;  // { dg-warning "exceeds its type" "" }
9   char c;
10 } a, a4[4];
12 struct B
14   char d;
15   A e;
16   char f;
17 } b;
19 struct C
21   char g;
22   long long h : 64;
23   char i;
24 } c, c4[4];
26 struct D
28   char j;
29   C k;
30   char l;
31 } d;
33 struct E
35   char m;
36   long long n : 160;    // { dg-warning "exceeds its type" "" }
37   char o;
38 } e, e4[4];
40 struct F
42   char p;
43   E q;
44   char r;
45 } f;
47 int main (void)
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;