On Thu, Jan 29, 2015 at 06:27:36PM +0800, Thomas Preud'homme wrote: > Incorrect folding happen when a bitfield in a union is accessed and the union > was initialized via another field. This is a reminiscence of GCC32RM-325 due > to sccvn not passing the right size to fold_ctor_reference. sccvn uses > TYPE_SIZE which gives the size of the container integer for a bitfield > instead of TYPE_PRECISION that gives the actual size occupied by the > bitfield. This patch fixes that and modify bitfld-6 so that it catch this > issue in addition to the old one. > > ChangeLog entries are as follows: > > *** gcc/ChangeLog *** > > 2015-01-28 Thomas Preud'homme <thomas.preudho...@arm.com> >
You should mention PR middle-end/62103 I'll defer review of the sccvn change to Richard. > * tree-ssa-sccvn.c (fully_constant_vn_reference_p): Use TYPE_PRECISION > to compute size of referenced value in the constant case. > > *** gcc/testsuite/ChangeLog *** > > 2015-01-28 Thomas Preud'homme <thomas.preudho...@arm.com> > > * gcc.c-torture/execute/bitfld-6.c: Use 24 bits for bitfield b. Adapt > expected values accordingly. IMHO if the old testcase wasn't incorrect, you'd better add a new testcase instead of modifying existing one. Jakub