https://gcc.gnu.org/bugzilla/show_bug.cgi?id=22141
hariharan.gcc at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hariharan.gcc at gmail dot com --- Comment #30 from hariharan.gcc at gmail dot com --- I saw a related problem, this time with bitfields $more bitfieldtest.c typedef union { struct { unsigned int b1:1; unsigned int b2:1; unsigned int b3:1; unsigned int b4:1; unsigned int b5:1; }fields; unsigned int word; } _t_bitfields; void _const_populate_bits(_t_bitfields * data) { data->fields.b1 = 1; data->fields.b2 = 0; data->fields.b3 = 1; data->fields.b4 = 1; data->fields.b5 = 0; } At the end of tree stages, it looks like this $more bitfieldtest.c.165t.optimized ;; Function _const_populate_bits (_const_populate_bits, funcdef_no=0, decl_uid=1339, cgraph_uid=0) _const_populate_bits (union _t_bitfields * data) { <bb 2>: data_2(D)->fields.b1 = 1; data_2(D)->fields.b2 = 0; data_2(D)->fields.b3 = 1; data_2(D)->fields.b4 = 1; data_2(D)->fields.b5 = 0; return; } Expand expands each one of the assignments in turn and some get combined later on into ok-ish code. It would be nice to be able to combine all 5 assignments into one. Its kind of related to this PR, but is it sufficiently different to warrant a separate PR for it?