From e1b0956a8e1f5609266cbe064b345bbb37b1e7e2 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 15 May 2020 23:15:38 +0200 Subject: [Ada] Small adjustment in the handling of alignment for arrays gcc/ada/ * freeze.adb (Freeze_Array_Type): Use Ctyp more consistently. Move code setting the alignment in the non-packed case to... * layout.adb (Layout_Type): ...here. --- gcc/ada/layout.adb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'gcc/ada/layout.adb') diff --git a/gcc/ada/layout.adb b/gcc/ada/layout.adb index 33728c0..73812f6 100644 --- a/gcc/ada/layout.adb +++ b/gcc/ada/layout.adb @@ -467,6 +467,22 @@ package body Layout is end if; end; end if; + + -- For non-packed arrays set the alignment of the array to the + -- alignment of the component type if it is unknown. Skip this + -- in atomic/VFA case since a larger alignment may be needed. + + if Is_Array_Type (E) + and then not Is_Packed (E) + and then Unknown_Alignment (E) + and then Known_Alignment (Component_Type (E)) + and then Known_Static_Component_Size (E) + and then Known_Static_Esize (Component_Type (E)) + and then Component_Size (E) = Esize (Component_Type (E)) + and then not Is_Atomic_Or_VFA (E) + then + Set_Alignment (E, Alignment (Component_Type (E))); + end if; end if; -- Even if the backend performs the layout, we still do a little in -- cgit v1.1