struct B { unsigned bit : 1; }; void ior (struct B *b) { b->bit |= 1; }
I get: ior (b) { <bb 0>: b->bit = (<unnamed type>) (unsigned char) ((signed char) b->bit | 1); return; } Note that we could just say b->bit = 1; -- Summary: OR of a bitfield and a constant is not optimized at tree level Product: gcc Version: unknown Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P2 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: kazu at cs dot umass dot edu CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18031