------- Comment #8 from rguenth at gcc dot gnu dot org 2010-07-19 12:47 ------- Well, the list of problems is endless it seems - we are not consistent in how we build accesses for
declD.1.u1.a.align = 13; vs. decl$u1$a$align_5 = BIT_FIELD_REF <MEM[(<unnamed-unsigned:24> *)&declD.2], 24, 0>; (the former is a COMPONENT_REF with DECL_BIT_FIELD while the latter is a BIT_FIELD_REF. The first access will be [0, 24] while the later [0, 32]. This causes us to scalarize declD.2 = declD.1; as declD.2 = declD.2; because we cannot find a matching access in load_assign_lhs_subreplacements and drop into the strange code for SRA_UDH_LEFT. So eventually we should not drop bit-field-ref kind outer accesses in favor of handling them as partial_ref or we should do the same for DECL_BIT_FIELD component-refs. I'm a bit lost and will attach the current WIP patch. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44972