diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2021-12-29 23:33:21 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2022-01-10 09:38:44 +0000 |
commit | 68adddccb139f87ff705fd744eb3771fc2c6497a (patch) | |
tree | f3148c8044f1c2f22056ff12a79d9ad633568232 | |
parent | b942847f787fc5765bdae95550ddf0de690b225c (diff) | |
download | gcc-68adddccb139f87ff705fd744eb3771fc2c6497a.zip gcc-68adddccb139f87ff705fd744eb3771fc2c6497a.tar.gz gcc-68adddccb139f87ff705fd744eb3771fc2c6497a.tar.bz2 |
[Ada] Fix error on too large size clause for bit-packed array
gcc/ada/
* exp_pakd.adb (Install_PAT): Do not reset the alignment here.
* layout.adb (Layout_Type): Call Adjust_Esize_Alignment after having
copied the RM_Size onto the Esize when the latter is too small.
-rw-r--r-- | gcc/ada/exp_pakd.adb | 1 | ||||
-rw-r--r-- | gcc/ada/layout.adb | 7 |
2 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb index 779dbb3..78093f8 100644 --- a/gcc/ada/exp_pakd.adb +++ b/gcc/ada/exp_pakd.adb @@ -577,7 +577,6 @@ package body Exp_Pakd is -- Set remaining fields of packed array type - Reinit_Alignment (PAT); Set_Parent (PAT, Empty); Set_Associated_Node_For_Itype (PAT, Typ); Set_Original_Array_Type (PAT, Typ); diff --git a/gcc/ada/layout.adb b/gcc/ada/layout.adb index 092f2f5..5a6acf6 100644 --- a/gcc/ada/layout.adb +++ b/gcc/ada/layout.adb @@ -616,7 +616,7 @@ package body Layout is Size : constant Uint := RM_Size (E); begin - Set_Esize (E, RM_Size (E)); + Set_Esize (E, Size); -- For scalar types, increase Object_Size to power of 2, but -- not less than a storage unit in any case (i.e., normally @@ -641,6 +641,11 @@ package body Layout is loop Set_Alignment (E, 2 * Alignment (E)); end loop; + + -- For the other types, apply standard adjustments + + else + Adjust_Esize_Alignment (E); end if; end; end if; |