1 // Test for oversized bitfield alignment in structs on IA-32 2 // { dg-do run { target i?86-*-* } } 3 // { dg-options "-O2" } 4 5 struct A 6 { 7 char a; 8 int b : 224; // { dg-warning "exceeds its type" "" } 9 char c; 10 } a, a4[4]; 11 12 struct B 13 { 14 char d; 15 A e; 16 char f; 17 } b; 18 19 struct C 20 { 21 char g; 22 long long h : 64; 23 char i; 24 } c, c4[4]; 25 26 struct D 27 { 28 char j; 29 C k; 30 char l; 31 } d; 32 33 struct E 34 { 35 char m; 36 long long n : 160; // { dg-warning "exceeds its type" "" } 37 char o; 38 } e, e4[4]; 39 40 struct F 41 { 42 char p; 43 E q; 44 char r; 45 } f; 46 47 int main (void) 48 { 49 if (&a.c - &a.a != 32) 50 return 1; 51 if (sizeof (a) != 36) 52 return 2; 53 if (sizeof (a4) != 4 * 36) 54 return 3; 55 if (sizeof (b) != 2 * 4 + 36) 56 return 4; 57 if (__alignof__ (b.e) != 4) 58 return 5; 59 if (&c.i - &c.g != 12) 60 return 6; 61 if (sizeof (c) != 16) 62 return 7; 63 if (sizeof (c4) != 4 * 16) 64 return 8; 65 if (sizeof (d) != 2 * 4 + 16) 66 return 9; 67 if (__alignof__ (d.k) != 4) 68 return 10; 69 if (&e.o - &e.m != 24) 70 return 11; 71 if (sizeof (e) != 28) 72 return 12; 73 if (sizeof (e4) != 4 * 28) 74 return 13; 75 if (sizeof (f) != 2 * 4 + 28) 76 return 14; 77 if (__alignof__ (f.q) != 4) 78 return 15; 79 return 0; 80 } 81