From a283cf62e45e080f4f9294573b04b9a28cd72ee8 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 30 Dec 2021 20:06:50 +0100 Subject: [PATCH] [Ada] Adjust the alignment to the size for bit-packed arrays gcc/ada/ * exp_pakd.adb (Install_PAT): If the PAT is a scalar type, apply the canonical adjustment to its alignment. --- gcc/ada/exp_pakd.adb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb index 78093f8..abb2088 100644 --- a/gcc/ada/exp_pakd.adb +++ b/gcc/ada/exp_pakd.adb @@ -573,6 +573,19 @@ package body Exp_Pakd is end if; end if; + -- In the case of a modular type, make sure the alignment is + -- consistent with the Esize. + + if Is_Scalar_Type (PAT) then + while Alignment (PAT) * System_Storage_Unit < Esize (PAT) + and then Alignment (PAT) < Maximum_Alignment + loop + Set_Alignment (PAT, 2 * Alignment (PAT)); + end loop; + end if; + + -- Then, in all cases, make sure the opposite is also true + Adjust_Esize_Alignment (PAT); -- Set remaining fields of packed array type -- 2.7.4