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~

Reply via email to