diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2024-10-18 09:28:17 +0200 |
---|---|---|
committer | Marc Poulhiès <dkm@gcc.gnu.org> | 2024-11-12 14:00:45 +0100 |
commit | ea497d17c11ee7465140aa13a18a0033ba5a2a27 (patch) | |
tree | 118719d87f9db832b458e68c5b7439280674b845 | |
parent | bbbfd37f95ac7d058e8b8185a494c782c832f050 (diff) | |
download | gcc-ea497d17c11ee7465140aa13a18a0033ba5a2a27.zip gcc-ea497d17c11ee7465140aa13a18a0033ba5a2a27.tar.gz gcc-ea497d17c11ee7465140aa13a18a0033ba5a2a27.tar.bz2 |
ada: Fix weird error in Ada.Numerics.Discrete_Random with Component_Alignment
The problem arises when an instance of Ada.Numerics.Discrete_Random is
covered by a pragma Component_Alignment with a non-default alignment.
gcc/ada/ChangeLog:
* exp_ch5.adb (Expand_Assign_Array): Make Act_Rhs a constant and
do not recompute it, as well as R_Type, when there is a change of
representation. Move comment about the RHS from here to...
(Expand_N_Assignment_Statement): ...here.
-rw-r--r-- | gcc/ada/exp_ch5.adb | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 8cad734..b884045 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -340,7 +340,7 @@ package body Exp_Ch5 is Lhs : constant Node_Id := Name (N); Act_Lhs : constant Node_Id := Get_Referenced_Object (Lhs); - Act_Rhs : Node_Id := Get_Referenced_Object (Rhs); + Act_Rhs : constant Node_Id := Get_Referenced_Object (Rhs); L_Type : constant Entity_Id := Underlying_Type (Get_Actual_Subtype (Act_Lhs)); @@ -515,14 +515,9 @@ package body Exp_Ch5 is Set_Backwards_OK (N, False); end if; - -- We certainly must use a loop for change of representation and also - -- we use the operand of the conversion on the right-hand side as the - -- effective right-hand side (the component types must match in this - -- situation). + -- We certainly must use a loop for change of representation if Crep then - Act_Rhs := Get_Referenced_Object (Rhs); - R_Type := Get_Actual_Subtype (Act_Rhs); Loop_Required := True; -- We require a loop if either side is possibly bit aligned @@ -3283,6 +3278,10 @@ package body Exp_Ch5 is -- Array types elsif Is_Array_Type (Typ) then + -- We use the operand of a conversion on the right-hand side as the + -- effective right-hand side (the component types must match in this + -- situation). + declare Actual_Rhs : Node_Id := Rhs; |