https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82210
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think the bug is in the ARRAY_REF design, because at least in C one can have arrays of over-aligned types the design choice that ARRAY_REF TREE_OPERAND (, 3) is measured in multiplies of TYPE_ALIGN_UNIT of the element doesn't make sense, because what you really get from array_ref_element_size in cases where the size of element is not a multiple of the TYPE_ALIGN_UNIT is something that doesn't have anything to do with the element size. Is that some Ada specific stuff? Similarly component_ref_field_offset multiplies by DECL_OFFSET_ALIGN, supposedly in this case DECL_OFFSET_ALIGN of b shouldn't be 16 bytes, but something smaller.