https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101062
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Eric Botcazou from comment #6) > > Does Ada allow bitfields in unions and if yes, what does it want for those? > > Yes, it does, and I don't think there is any specific need so the default > should be OK like for structures. I also think since there's at most a single active union member the default should work. Now, it looks to me this is rather an issue that the access is larger than the object and thus a general bug - at least I don't see how it should only manifest with bitfields in unions? Note we do if (TREE_CODE (to) == COMPONENT_REF && DECL_BIT_FIELD_TYPE (TREE_OPERAND (to, 1))) get_bit_range (&bitregion_start, &bitregion_end, to, &bitpos, &offset); /* The C++ memory model naturally applies to byte-aligned fields. However, if we do not have a DECL_BIT_FIELD_TYPE but BITPOS or BITSIZE are not byte-aligned, there is no need to limit the range we can access. This can occur with packed structures in Ada. */ else if (maybe_gt (bitsize, 0) && multiple_p (bitsize, BITS_PER_UNIT) && multiple_p (bitpos, BITS_PER_UNIT)) { bitregion_start = bitpos; bitregion_end = bitpos + bitsize - 1; } but if we assume that for DECL_BIT_FIELD_TYPE there's a representative then we miss the else if, so - maybe get_bit_range should return whether it handled things or the else if part should be done unconditionally in case bitregion_start/end is not {0,0}?