https://gcc.gnu.org/g:ea497d17c11ee7465140aa13a18a0033ba5a2a27

commit r15-5124-gea497d17c11ee7465140aa13a18a0033ba5a2a27
Author: Eric Botcazou <[email protected]>
Date:   Fri Oct 18 09:28:17 2024 +0200

    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:
---
 gcc/ada/exp_ch5.adb | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

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;

Reply via email to