https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88739
--- Comment #3 from Wilco <wilco at gcc dot gnu.org> --- (In reply to Richard Earnshaw from comment #2) > > _23 = BIT_FIELD_REF <_2, 16, 0>; // WRONG: should be _2, 14, 0 > > _2 is declared as a 30-bit integer, so perhaps the statement is right, but > expand needs to understand that the shift extract of the top 16 bits comes > from a different location in big-endian. So the question becomes what format is this in? <unnamed-unsigned:30> _2; Is it big-endian memory format (so value is in top 30 bits) or simply a 30-bit value in a virtual register?