| commit b6f742f96c62bab0582021455328ae3be58e16d3 |
| Author: pmderodat <pmderodat@138bc75d-0d04-0410-961f-82ee72b054a4> |
| Date: Fri May 25 09:05:10 2018 +0000 |
| |
| [Ada] Remove "constant" attribute on Osint.Unknown_Attributes |
| |
| 2018-05-25 Arnaud Charlet <charlet@adacore.com> |
| |
| gcc/ada/ |
| |
| * exp_aggr.adb (Convert_To_Positional): Bump default for |
| Max_Others_Replicate to 32. Update comments. |
| * osint.ads (Unknown_Attributes): No longer pretend this is a constant. |
| (No_File_Info_Cache): Initialize separately. |
| * osint.adb (No_File_Info_Cache): Update initializer. |
| |
| git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@260739 138bc75d-0d04-0410-961f-82ee72b054a4 |
| |
| diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog |
| index e4127e472aa..d56240b7b82 100644 |
| --- a/gcc/ada/ChangeLog |
| +++ b/gcc/ada/ChangeLog |
| @@ -188,6 +188,14 @@ |
| an allocator if the type is an unconstrained record type with default |
| discriminant. |
| |
| +2018-05-25 Arnaud Charlet <charlet@adacore.com> |
| + |
| + * exp_aggr.adb (Convert_To_Positional): Bump default for |
| + Max_Others_Replicate to 32. Update comments. |
| + * osint.ads (Unknown_Attributes): No longer pretend this is a constant. |
| + (No_File_Info_Cache): Initialize separately. |
| + * osint.adb (No_File_Info_Cache): Update initializer. |
| + |
| 2018-05-04 John Marino <gnugcc@marino.st> |
| |
| PR ada/85635 |
| diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb |
| index f723c1b4d99..ff5210eb4e4 100644 |
| --- a/gcc/ada/exp_aggr.adb |
| +++ b/gcc/ada/exp_aggr.adb |
| @@ -284,14 +284,14 @@ package body Exp_Aggr is |
| |
| procedure Convert_To_Positional |
| (N : Node_Id; |
| - Max_Others_Replicate : Nat := 5; |
| + Max_Others_Replicate : Nat := 32; |
| Handle_Bit_Packed : Boolean := False); |
| -- If possible, convert named notation to positional notation. This |
| -- conversion is possible only in some static cases. If the conversion is |
| -- possible, then N is rewritten with the analyzed converted aggregate. |
| -- The parameter Max_Others_Replicate controls the maximum number of |
| -- values corresponding to an others choice that will be converted to |
| - -- positional notation (the default of 5 is the normal limit, and reflects |
| + -- positional notation (the default of 32 is the normal limit, and reflects |
| -- the fact that normally the loop is better than a lot of separate |
| -- assignments). Note that this limit gets overridden in any case if |
| -- either of the restrictions No_Elaboration_Code or No_Implicit_Loops is |
| @@ -301,11 +301,6 @@ package body Exp_Aggr is |
| -- Packed_Array_Aggregate_Handled, we set this parameter to True, since |
| -- these are cases we handle in there. |
| |
| - -- It would seem useful to have a higher default for Max_Others_Replicate, |
| - -- but aggregates in the compiler make this impossible: the compiler |
| - -- bootstrap fails if Max_Others_Replicate is greater than 25. This |
| - -- is unexpected ??? |
| - |
| procedure Expand_Array_Aggregate (N : Node_Id); |
| -- This is the top-level routine to perform array aggregate expansion. |
| -- N is the N_Aggregate node to be expanded. |
| @@ -4292,7 +4287,7 @@ package body Exp_Aggr is |
| |
| procedure Convert_To_Positional |
| (N : Node_Id; |
| - Max_Others_Replicate : Nat := 5; |
| + Max_Others_Replicate : Nat := 32; |
| Handle_Bit_Packed : Boolean := False) |
| is |
| Typ : constant Entity_Id := Etype (N); |
| diff --git a/gcc/ada/osint.adb b/gcc/ada/osint.adb |
| index 0c23761b6dc..896fbc7ee37 100644 |
| --- a/gcc/ada/osint.adb |
| +++ b/gcc/ada/osint.adb |
| @@ -250,8 +250,7 @@ package body Osint is |
| Attr : aliased File_Attributes; |
| end record; |
| |
| - No_File_Info_Cache : constant File_Info_Cache := |
| - (No_File, Unknown_Attributes); |
| + No_File_Info_Cache : constant File_Info_Cache := (No_File, (others => 0)); |
| |
| package File_Name_Hash_Table is new GNAT.HTable.Simple_HTable ( |
| Header_Num => File_Hash_Num, |
| diff --git a/gcc/ada/osint.ads b/gcc/ada/osint.ads |
| index 65a87fe4ce3..6c75b521456 100644 |
| --- a/gcc/ada/osint.ads |
| +++ b/gcc/ada/osint.ads |
| @@ -255,10 +255,26 @@ package Osint is |
| -- from the disk and then cached in the File_Attributes parameter (possibly |
| -- along with other values). |
| |
| - type File_Attributes is private; |
| - Unknown_Attributes : constant File_Attributes; |
| + File_Attributes_Size : constant Natural := 32; |
| + -- This should be big enough to fit a "struct file_attributes" on any |
| + -- system. It doesn't cause any malfunction if it is too big (which avoids |
| + -- the need for either mapping the struct exactly or importing the sizeof |
| + -- from C, which would result in dynamic code). However, it does waste |
| + -- space (e.g. when a component of this type appears in a record, if it is |
| + -- unnecessarily large). Note: for runtime units, use System.OS_Constants. |
| + -- SIZEOF_struct_file_attributes instead, which has the exact value. |
| + |
| + type File_Attributes is |
| + array (1 .. File_Attributes_Size) |
| + of System.Storage_Elements.Storage_Element; |
| + for File_Attributes'Alignment use Standard'Maximum_Alignment; |
| + |
| + Unknown_Attributes : File_Attributes; |
| -- A cache for various attributes for a file (length, accessibility,...) |
| - -- This must be initialized to Unknown_Attributes prior to the first call. |
| + -- Will be initialized properly at elaboration (for efficiency later on, |
| + -- avoid function calls every time we want to reset the attributes) prior |
| + -- to the first usage. We cannot make it constant since the compiler may |
| + -- put it in a read-only section. |
| |
| function Is_Directory |
| (Name : C_File_Name; |
| @@ -754,22 +770,4 @@ private |
| -- detected, the file being written is deleted, and a fatal error is |
| -- signalled. |
| |
| - File_Attributes_Size : constant Natural := 32; |
| - -- This should be big enough to fit a "struct file_attributes" on any |
| - -- system. It doesn't cause any malfunction if it is too big (which avoids |
| - -- the need for either mapping the struct exactly or importing the sizeof |
| - -- from C, which would result in dynamic code). However, it does waste |
| - -- space (e.g. when a component of this type appears in a record, if it is |
| - -- unnecessarily large). Note: for runtime units, use System.OS_Constants. |
| - -- SIZEOF_struct_file_attributes instead, which has the exact value. |
| - |
| - type File_Attributes is |
| - array (1 .. File_Attributes_Size) |
| - of System.Storage_Elements.Storage_Element; |
| - for File_Attributes'Alignment use Standard'Maximum_Alignment; |
| - |
| - Unknown_Attributes : constant File_Attributes := (others => 0); |
| - -- Will be initialized properly at elaboration (for efficiency later on, |
| - -- avoid function calls every time we want to reset the attributes). |
| - |
| end Osint; |