/* The bit-field below would have a problem if __INT_MAX__ is too small. */ #if __INT_MAX__ < 2147483647 int main (void) { exit (0); } #else typedef struct { unsigned b0:1, f1:17, b18:1, b19:1, b20:1, f2:11; } bf; typedef union { bf b; unsigned w; } bu; bu f(bu i) { bu o = i; if (o.b.b0) o.b.b18 = 1, o.b.b20 = 1; else o.b.b18 = 0, o.b.b20 = 0; return o; } main() { bu a; bu r; a.w = 0x4000000; a.b.b0 = 0; r = f(a); if (a.w != r.w) abort(); exit(0); } #endif