From: Eric Botcazou Date: Fri, 18 Oct 2024 07:28:17 +0000 (+0200) Subject: ada: Fix weird error in Ada.Numerics.Discrete_Random with Component_Alignment X-Git-Tag: basepoints/gcc-16~4429 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea497d17c11ee7465140aa13a18a0033ba5a2a27;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index 8cad734628a6..b8840450026d 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;