On 04/16/2014 12:39 AM, Eric Botcazou wrote: >> The primary bit of rfc here is the hunk that applies to ada/types.h >> with respect to Fat_Pointer. Given that the Ada type, as defined in >> s-stratt.ads, does not include alignment, I can't imagine why the C >> type should have it. > > See gcc-interface/utils.c:finish_fat_pointer_type.
Ah hah. /* Make sure we can put it into a register. */ if (STRICT_ALIGNMENT) TYPE_ALIGN (record_type) = MIN (BIGGEST_ALIGNMENT, 2 * POINTER_SIZE); AArch64 is not a STRICT_ALIGNMENT target, thus the mismatch. If we were to make this alignment unconditional, would it be better to drop the code from here in finish_fat_pointer_type and instead record that in the Ada source, as we do with the C source? I presume for Fat_Pointer'Alignment use System.Address'Size * 2; or some such incantation would do that... r~