Hi, On Tue, 10 May 2011, Richard Guenther wrote:
> struct B { > unsigned bit0 : 1; > unsigned bit1 : 1; > }; > > void > foo (struct B *b) > { > b->bit0 = b->bit0 | b->bit1; > } > > we with this patch generate > > D.2686_2 = b_1(D)->bit0; > D.2688_4 = b_1(D)->bit1; > D.2693_10 = D.2688_4 ^ D.2686_2; > b_1(D)->bit0 = D.2693_10; I assume that this generates a XOR instead of an OR is a typo not a feature of the patch ;-) > + struct B { > + unsigned bit0 : 1; > + unsigned bit1 : 1; > + }; > + > + void > + foo (struct B *b) > + { > + b->bit0 = b->bit0 | b->bit1; > + } > + > + /* { dg-final { scan-tree-dump-not "\\\(unsigned char\\\)" "optimized" } } > */ Perhaps test for only '\\\(unsigned' ? Because I'm not sure if some targets don't extend to "unsigned int", after all that's the base type of the bitfields. Ciao, Michael.