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