aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-10-18 09:28:17 +0200
committerMarc Poulhiès <dkm@gcc.gnu.org>2024-11-12 14:00:45 +0100
commitea497d17c11ee7465140aa13a18a0033ba5a2a27 (patch)
tree118719d87f9db832b458e68c5b7439280674b845 /gcc
parentbbbfd37f95ac7d058e8b8185a494c782c832f050 (diff)
downloadgcc-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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/exp_ch5.adb13
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;