From 9ca42b6474e1f5b4caeaa58e36aaf993951660af Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Thu, 14 Dec 2017 17:03:16 +0000 Subject: [PATCH] * gcc-interface/decl.c (gnat_to_gnu_field): Do not set the alignment of the enclosing record type if it is not already set. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255645 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/decl.c | 3 ++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/alignment13.adb | 21 +++++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/alignment13.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 3ac3bfba6e5..c87f4a22692 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,10 @@ 2017-12-14 Eric Botcazou + * gcc-interface/decl.c (gnat_to_gnu_field): Do not set the alignment + of the enclosing record type if it is not already set. + +2017-12-14 Eric Botcazou + * gcc-interface/gigi.h (pad_type_has_rm_size): Declare. * gcc-interface/decl.c (gnat_to_gnu_entity) : Do not build a padding type for the alignment before validating the size. diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index f2da070ab0f..b014e687f6d 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -6890,7 +6890,8 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed, { const unsigned int type_align = TYPE_ALIGN (gnu_field_type); - if (TYPE_ALIGN (gnu_record_type) < type_align) + if (TYPE_ALIGN (gnu_record_type) + && TYPE_ALIGN (gnu_record_type) < type_align) SET_TYPE_ALIGN (gnu_record_type, type_align); /* If the position is not a multiple of the alignment of the type, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4fac0015fd2..f87fb481899 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-12-14 Eric Botcazou + + * gnat.dg/alignment13.adb: New test. + 2017-12-14 Jakub Jelinek PR lto/81406 diff --git a/gcc/testsuite/gnat.dg/alignment13.adb b/gcc/testsuite/gnat.dg/alignment13.adb new file mode 100644 index 00000000000..dd0b25425f0 --- /dev/null +++ b/gcc/testsuite/gnat.dg/alignment13.adb @@ -0,0 +1,21 @@ +-- { dg-do run } +-- { dg-options "-gnatws" } + +procedure Alignment13 is + + type Rec is record + I1 : aliased Short_Integer; + I2 : Integer; + end record; + + for Rec use record + I1 at 0 range 0 .. 15; + end record; + + R : Rec; + +begin + if R.I2'Bit_Position /= 32 then + raise Program_Error; + end if; +end; -- 2.11.4.GIT