http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49768
--- Comment #1 from Mikael Pettersson <mikpe at it dot uu.se> 2011-07-17 12:47:17 UTC --- Created attachment 24780 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24780 reduced test case This reduced test case doesn't use any union, just a struct with two one-bit fields, and fails at -O1 and above with 4.6 and 4.7 on i686-linux. Looking at the generated code, gcc has removed all runtime checks and just inserted a call to abort. /* pr49768.c */ int main(void) { static struct { unsigned int :1; unsigned int test_bit2:1; } test = { .test_bit2 = 1, }; if (test.test_bit2 != 1) __builtin_abort(); return 0; }