This disables the recently implemented component reordering in one more case.
Tested on x86_64-suse-linux, applied on the mainline.
2017-09-09 Eric Botcazou <ebotca...@adacore.com>
* gcc-interface/decl.c (components_to_record): Do not reorder in non-
packed record types if pragma Optimize_Alignment (Space) is enabled.
--
Eric Botcazou
Index: gcc-interface/decl.c
===================================================================
--- gcc-interface/decl.c (revision 251934)
+++ gcc-interface/decl.c (working copy)
@@ -7683,7 +7683,9 @@ components_to_record (Node_Id gnat_compo
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_compo
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