OSDN Git Service

* gcc.dg/altivec-vec-merge.c: Make test usable on GNU/Linux targets
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / i386-bitfield1.c
1 // Test for bitfield alignment in structs on IA-32
2 // { dg-do run { target i?86-*-* } }
3 /* { dg-skip-if "" { i?86-*-* } { "-m64" } { "" } } */
4 // { dg-options "-O2" }
5 // { dg-options "-mno-align-double -mno-ms-bitfields" { target i?86-*-interix* i?86-*-cygwin* i?86-*-mingw*} }
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 }