1193326Sed/* Test for bitfield alignment in structs and unions.  */
2193326Sed/* { dg-do run { target pcc_bitfield_type_matters } }  */
3193326Sed/* { dg-options "-O2" }  */
4193326Sed
5193326Sedextern void abort (void);
6193326Sedextern void exit (int);
7193326Sed
8193326Sedtypedef long la __attribute__((aligned (8)));
9193326Sed
10193326Sedstruct A
11193326Sed{
12193326Sed  char a;
13193326Sed  union UA
14263508Sdim  {
15193326Sed    char x;
16193326Sed    la y : 6;
17193326Sed  } b;
18193326Sed  char c;
19193326Sed} a;
20193326Sed
21193326Sedstruct B
22193326Sed{
23193326Sed  char a;
24193326Sed  union UB
25193326Sed  {
26193326Sed    char x;
27193326Sed    long y : 6 __attribute__((aligned (8)));
28193326Sed  } b;
29193326Sed  char c;
30193326Sed} b;
31193326Sed
32193326Sedstruct C
33193326Sed{
34193326Sed  char a;
35193326Sed  struct UC
36193326Sed  {
37193326Sed    la y : 6;
38263508Sdim  } b;
39193326Sed  char c;
40193326Sed} c;
41193326Sed
42193326Sedstruct D
43193326Sed{
44193326Sed  char a;
45193326Sed  struct UD
46193326Sed  {
47193326Sed    long y : 6 __attribute__((aligned (8)));
48193326Sed  } b;
49193326Sed  char c;
50193326Sed} d;
51193326Sed
52193326Sedint main (void)
53263508Sdim{
54263508Sdim  if (sizeof (a) != sizeof (b))
55263508Sdim    abort ();
56193326Sed  if (sizeof (a) != sizeof (c))
57193326Sed    abort ();
58193326Sed  if (sizeof (a) != sizeof (d))
59193326Sed    abort ();
60193326Sed  if ((&a.c - &a.a) != (&b.c - &b.a))
61193326Sed    abort ();
62193326Sed  if ((&a.c - &a.a) != (&c.c - &c.a))
63193326Sed    abort ();
64193326Sed  if ((&a.c - &a.a) != (&d.c - &d.a))
65193326Sed    abort ();
66193326Sed  exit (0);
67193326Sed}
68193326Sed