diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2016-05-16 11:08:53 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2016-05-16 11:08:53 +0000 |
commit | b3f7567260257b58a77a7c43ba9eb4840f2a09d8 (patch) | |
tree | d15a8ba1c8aa9a9098735e4c0df5928335dae9d6 /gcc/ada/exp_pakd.adb | |
parent | 3362d76470c5b397b53a699130406f422b83bba7 (diff) | |
download | gcc-b3f7567260257b58a77a7c43ba9eb4840f2a09d8.zip gcc-b3f7567260257b58a77a7c43ba9eb4840f2a09d8.tar.gz gcc-b3f7567260257b58a77a7c43ba9eb4840f2a09d8.tar.bz2 |
* doc/gnat_rm/implementation_defined_attributes.rst
(Scalar_Storage_Order): Adjust restriction for packed array types.
* einfo.ads (Is_Bit_Packed_Array): Adjust description.
(Is_Packed): Likewise.
(Is_Packed_Array_Impl_Type): Likewise.
(Packed_Array_Impl_Type): Likewise.
* exp_ch4.adb (Expand_N_Indexed_Component): Do not do anything special
if the prefix is not a packed array implemented specially.
* exp_ch6.adb (Expand_Actuals): Expand indexed components only for
bit-packed array types.
* exp_pakd.adb (Install_PAT): Set Is_Packed_Array_Impl_Type flag on
the PAT before analyzing its declaration.
(Create_Packed_Array_Impl_Type): Remove redundant statements.
* freeze.adb (Check_Component_Storage_Order): Reject packed array
components only if they are bit packed.
(Freeze_Array_Type): Fix logic detecting bit packing and do not bit
pack for composite types whose size is multiple of a byte.
Create the implementation type for packed array types only when it is
needed, i.e. bit packing or packing because of holes in index types.
Make sure the Has_Non_Standard_Rep and Is_Packed flags agree.
* gcc-interface/gigi.h (make_packable_type): Add MAX_ALIGN parameter.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Signed_Integer_Subtype>:
Call maybe_pad_type instead of building the padding type manually.
(gnat_to_gnu_entity) <E_Array_Subtype>: Do not assert that
Packed_Array_Impl_Type is present for packed arrays.
(gnat_to_gnu_component_type): Also handle known alignment for packed
types by passing it to make_packable_type.
* gcc-interface/utils.c (make_packable_type): Add MAX_ALIGN parameter
and deal with it in the array case. Adjust recursive call. Simplify
computation of new size and cap the alignment to BIGGEST_ALIGNMENT.
From-SVN: r236279
Diffstat (limited to 'gcc/ada/exp_pakd.adb')
-rw-r--r-- | gcc/ada/exp_pakd.adb | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb index ea82596..0ec3ef4 100644 --- a/gcc/ada/exp_pakd.adb +++ b/gcc/ada/exp_pakd.adb @@ -543,6 +543,7 @@ package body Exp_Pakd is end if; Set_Is_Itype (PAT, True); + Set_Is_Packed_Array_Impl_Type (PAT, True); Set_Packed_Array_Impl_Type (Typ, PAT); Analyze (Decl, Suppress => All_Checks); @@ -569,7 +570,6 @@ package body Exp_Pakd is Init_Alignment (PAT); Set_Parent (PAT, Empty); Set_Associated_Node_For_Itype (PAT, Typ); - Set_Is_Packed_Array_Impl_Type (PAT, True); Set_Original_Array_Type (PAT, Typ); -- Propagate representation aspects @@ -701,8 +701,6 @@ package body Exp_Pakd is Make_Defining_Identifier (Loc, Chars => New_External_Name (Chars (Typ), 'P')); - Set_Packed_Array_Impl_Type (Typ, PAT); - declare Indexes : constant List_Id := New_List; Indx : Node_Id; @@ -798,9 +796,6 @@ package body Exp_Pakd is Type_Definition => Typedef); end; - -- Set type as packed array type and install it - - Set_Is_Packed_Array_Impl_Type (PAT); Install_PAT; return; @@ -819,13 +814,13 @@ package body Exp_Pakd is Make_Defining_Identifier (Loc, Chars => Make_Packed_Array_Impl_Type_Name (Typ, Csize)); - Set_Packed_Array_Impl_Type (Typ, PAT); Set_PB_Type; Decl := Make_Subtype_Declaration (Loc, Defining_Identifier => PAT, Subtype_Indication => New_Occurrence_Of (PB_Type, Loc)); + Install_PAT; return; @@ -843,8 +838,6 @@ package body Exp_Pakd is Make_Defining_Identifier (Loc, Chars => Make_Packed_Array_Impl_Type_Name (Typ, Csize)); - Set_Packed_Array_Impl_Type (Typ, PAT); - -- Build an expression for the length of the array in bits. -- This is the product of the length of each of the dimensions |