aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/layout.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/layout.adb')
-rw-r--r--gcc/ada/layout.adb18
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ada/layout.adb b/gcc/ada/layout.adb
index ce2fe30..73812f6 100644
--- a/gcc/ada/layout.adb
+++ b/gcc/ada/layout.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2019, Free Software Foundation, Inc. --
+-- Copyright (C) 2001-2020, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -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