From: Arnaud Charlet Date: Fri, 25 May 2018 09:05:10 +0000 (+0000) Subject: [Ada] Remove "constant" attribute on Osint.Unknown_Attributes X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f70b01165e6d392a110cb963060ea2a17feebbb7;p=gcc.git [Ada] Remove "constant" attribute on Osint.Unknown_Attributes 2018-05-25 Arnaud Charlet 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. From-SVN: r260739 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index d20be7e484c..ec7bee63a65 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,11 @@ +2018-05-25 Arnaud Charlet + + * 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-25 Javier Miranda * sem_res.adb (Resolve_Membership_Op): Allow the use of the membership diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index f4619a8b9e1..f045e3fe425 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. @@ -4296,7 +4291,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;