| /* Test for bitfield alignment in structs and unions. */ |
| /* { dg-do run } */ |
| /* { dg-options "-O2" } */ |
| |
| extern void abort (void); |
| extern void exit (int); |
| |
| typedef long la __attribute__((aligned (8))); |
| |
| struct A |
| { |
| char a; |
| union UA |
| { |
| char x; |
| la y : 6; |
| } b; |
| char c; |
| } a; |
| |
| struct B |
| { |
| char a; |
| union UB |
| { |
| char x; |
| long y : 6 __attribute__((aligned (8))); |
| } b; |
| char c; |
| } b; |
| |
| struct C |
| { |
| char a; |
| struct UC |
| { |
| la y : 6; |
| } b; |
| char c; |
| } c; |
| |
| struct D |
| { |
| char a; |
| struct UD |
| { |
| long y : 6 __attribute__((aligned (8))); |
| } b; |
| char c; |
| } d; |
| |
| int main (void) |
| { |
| if (sizeof (a) != sizeof (b)) |
| abort (); |
| if (sizeof (a) != sizeof (c)) |
| abort (); |
| if (sizeof (a) != sizeof (d)) |
| abort (); |
| if ((&a.c - &a.a) != (&b.c - &b.a)) |
| abort (); |
| if ((&a.c - &a.a) != (&c.c - &c.a)) |
| abort (); |
| if ((&a.c - &a.a) != (&d.c - &d.a)) |
| abort (); |
| exit (0); |
| } |