aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2017-09-09 12:48:41 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2017-09-09 12:48:41 +0000
commita713e7bb72617e88e9b2b64cecaffae7499146fb (patch)
tree6d468691713b6d0709526d1f49beecc5af7f9704 /gcc/ada
parent3d25b3ba49e73ea62920786f1785db6cfc4daa85 (diff)
downloadgcc-a713e7bb72617e88e9b2b64cecaffae7499146fb.zip
gcc-a713e7bb72617e88e9b2b64cecaffae7499146fb.tar.gz
gcc-a713e7bb72617e88e9b2b64cecaffae7499146fb.tar.bz2
decl.c (components_to_record): Do not reorder in non- packed record types if...
* gcc-interface/decl.c (components_to_record): Do not reorder in non- packed record types if pragma Optimize_Alignment (Space) is enabled. From-SVN: r251936
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/decl.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 804a79e..e929eff 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,10 @@
2017-09-09 Eric Botcazou <ebotcazou@adacore.com>
+ * gcc-interface/decl.c (components_to_record): Do not reorder in non-
+ packed record types if pragma Optimize_Alignment (Space) is enabled.
+
+2017-09-09 Eric Botcazou <ebotcazou@adacore.com>
+
* gcc-interface/trans.c (Subprogram_Body_to_gnu): Disregard inlining
limits for expression functions.
(gnat_to_gnu) <N_Object_Declaration>: Fix formatting.
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index f8752c8..569e64d 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -7683,7 +7683,9 @@ components_to_record (Node_Id gnat_component_list, Entity_Id gnat_record_type,
of a byte, so that they don't cause the regular fields to be either at
self-referential/variable offset or misaligned. Note, in the latter
case, that this can only happen in packed record types so the alignment
- is effectively capped to the byte for the whole record.
+ is effectively capped to the byte for the whole record. But we don't
+ do it for non-packed record types if pragma Optimize_Alignment (Space)
+ is specified because this can prevent alignment gaps from being filled.
Optionally, if the layout warning is enabled, keep track of the above 4
different kinds of fields and issue a warning if some of them would be
@@ -7694,6 +7696,8 @@ components_to_record (Node_Id gnat_component_list, Entity_Id gnat_record_type,
const bool do_reorder
= (Convention (gnat_record_type) == Convention_Ada
&& !No_Reordering (gnat_record_type)
+ && (!Optimize_Alignment_Space (gnat_record_type)
+ || Is_Packed (gnat_record_type))
&& !debug__debug_flag_dot_r);
const bool w_reorder
= (Convention (gnat_record_type) == Convention_Ada