From a713e7bb72617e88e9b2b64cecaffae7499146fb Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 9 Sep 2017 12:48:41 +0000 Subject: 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 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/decl.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'gcc') 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 + * 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 + * gcc-interface/trans.c (Subprogram_Body_to_gnu): Disregard inlining limits for expression functions. (gnat_to_gnu) : 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 -- cgit v1.1