1/* Test for bitfield alignment in structs and unions. */ 2/* { dg-do run { target pcc_bitfield_type_matters } } */ 3/* { dg-options "-O2" } */ 4 5extern void abort (void); 6extern void exit (int); 7 8typedef long la __attribute__((aligned (8))); 9 10struct A 11{ 12 char a; 13 union UA 14 { 15 char x; 16 la y : 6; 17 } b; 18 char c; 19} a; 20 21struct B 22{ 23 char a; 24 union UB 25 { 26 char x; 27 long y : 6 __attribute__((aligned (8))); 28 } b; 29 char c; 30} b; 31 32struct C 33{ 34 char a; 35 struct UC 36 { 37 la y : 6; 38 } b; 39 char c; 40} c; 41 42struct D 43{ 44 char a; 45 struct UD 46 { 47 long y : 6 __attribute__((aligned (8))); 48 } b; 49 char c; 50} d; 51 52int main (void) 53{ 54 if (sizeof (a) != sizeof (b)) 55 abort (); 56 if (sizeof (a) != sizeof (c)) 57 abort (); 58 if (sizeof (a) != sizeof (d)) 59 abort (); 60 if ((&a.c - &a.a) != (&b.c - &b.a)) 61 abort (); 62 if ((&a.c - &a.a) != (&c.c - &c.a)) 63 abort (); 64 if ((&a.c - &a.a) != (&d.c - &d.a)) 65 abort (); 66 exit (0); 67} 68