aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/layout.adb
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2020-05-15 23:15:38 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2020-07-07 05:27:00 -0400
commite1b0956a8e1f5609266cbe064b345bbb37b1e7e2 (patch)
tree7b97c7c9c4d38ca38fd659883763ae10fa128d57 /gcc/ada/layout.adb
parente997d94b298c5ea753b613c38518a2c72bdf44af (diff)
downloadgcc-e1b0956a8e1f5609266cbe064b345bbb37b1e7e2.zip
gcc-e1b0956a8e1f5609266cbe064b345bbb37b1e7e2.tar.gz
gcc-e1b0956a8e1f5609266cbe064b345bbb37b1e7e2.tar.bz2
[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.
Diffstat (limited to 'gcc/ada/layout.adb')
-rw-r--r--gcc/ada/layout.adb16
1 files changed, 16 insertions, 0 deletions
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