http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52666
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Last reconfirmed|2012-03-22 00:00:00 | AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org |gnu.org | --- Comment #4 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-03-22 13:48:26 UTC --- It seems we choose to lower the vector to word-mode operations but the number of words is bigger than the number of vector elements. Thus we trigger the new constant-folding code for BIT_FIELD_REFs that uses native_encode/interpret_expr. Now the issue is that this does not work correctly because of a typo ... Index: gcc/fold-const.c =================================================================== --- gcc/fold-const.c (revision 185691) +++ gcc/fold-const.c (working copy) @@ -14012,7 +14012,7 @@ fold_ternary_loc (location_t loc, enum t /* Need bit-shifting of the buffer to relax the following. */ && tree_low_cst (op2, 1) % BITS_PER_UNIT == 0) { - unsigned HOST_WIDE_INT bitpos = tree_low_cst (op1, 2); + unsigned HOST_WIDE_INT bitpos = tree_low_cst (op2, 1); unsigned HOST_WIDE_INT bitsize = tree_low_cst (op1, 1); unsigned HOST_WIDE_INT clen; clen = tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (arg0)), 1);