]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Simplify expansion of packed array assignments
authorPiotr Trojanek <trojanek@adacore.com>
Tue, 3 Oct 2023 17:04:16 +0000 (19:04 +0200)
committerMarc Poulhiès <poulhies@adacore.com>
Tue, 7 Nov 2023 09:15:02 +0000 (10:15 +0100)
When expanding assignment to a packed array object, e.g. a formal
parameter with mode OUT that might have unconstrained type, we took the
component type and component size from the constrained actual subtype.
It is simpler to take these properties from the nominal type of the
assigned object.

Semantics is unaffected, because constraining the array doesn't change
the type or size of the array components.

gcc/ada/

* exp_pakd.adb (Expand_Bit_Packed_Element_Set): Change Ctyp and Csiz
from variables to constants and compute them using the nominal type
of the assigned array object.

gcc/ada/exp_pakd.adb

index 68f0db3d56dabd0d9a8aa724346e204a8a856c03..2b92c467187a1310410b341c0e0d6c4379865e16 100644 (file)
@@ -1059,10 +1059,12 @@ package body Exp_Pakd is
       Obj   : Node_Id;
       Atyp  : Entity_Id;
       PAT   : Entity_Id;
-      Ctyp  : Entity_Id;
-      Csiz  : Int;
       Cmask : Uint;
 
+      Arr_Typ : constant Entity_Id := Etype (Prefix (Lhs));
+      Ctyp    : constant Entity_Id := Component_Type (Arr_Typ);
+      Csiz    : constant Int := UI_To_Int (Component_Size (Arr_Typ));
+
       Shift : Node_Id;
       --  The expression for the shift value that is required
 
@@ -1111,8 +1113,6 @@ package body Exp_Pakd is
       Convert_To_Actual_Subtype (Obj);
       Atyp := Etype (Obj);
       PAT  := Packed_Array_Impl_Type (Atyp);
-      Ctyp := Component_Type (Atyp);
-      Csiz := UI_To_Int (Component_Size (Atyp));
 
       --  We remove side effects, in case the rhs modifies the lhs, because we
       --  are about to transform the rhs into an expression that first READS