From b9ec846384e6908fe4d9aff0703c5ae320d3f366 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Tue, 15 Oct 2013 12:28:02 +0200 Subject: [PATCH] [multiple changes] 2013-10-15 Tristan Gingold * adaint.c (__gnat_get_executable_load_address): Remove AIX specific code. 2013-10-15 Ed Schonberg * exp_aggr.adb (Aggr_Size_OK): Refine criteria to better handle large static aggregates with static record components, to avoid generating a large number of asignments. Conversely, improve handling of aggregates initialized by a single association, which are most efficiently implemented with a loop. 2013-10-15 Hristian Kirtchev * sem_prag.adb (Analyze_Input_Item): Emit an error when the input item comes from the related package. 2013-10-15 Arnaud Charlet * exp_ch11.adb (Expand_Exception_Handlers): Restrict previous change. From-SVN: r203593 --- gcc/ada/ChangeLog | 23 +++++++++++++++++++++++ gcc/ada/adaint.c | 24 ------------------------ gcc/ada/exp_aggr.adb | 13 +++++++++++-- gcc/ada/exp_ch11.adb | 3 ++- gcc/ada/sem_prag.adb | 4 ++-- 5 files changed, 38 insertions(+), 29 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index e9fe2cd373f..ac5cbb6730d 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,26 @@ +2013-10-15 Tristan Gingold + + * adaint.c (__gnat_get_executable_load_address): Remove AIX + specific code. + +2013-10-15 Ed Schonberg + + * exp_aggr.adb (Aggr_Size_OK): Refine criteria to better handle + large static aggregates with static record components, to avoid + generating a large number of asignments. Conversely, improve + handling of aggregates initialized by a single association, + which are most efficiently implemented with a loop. + +2013-10-15 Hristian Kirtchev + + * sem_prag.adb (Analyze_Input_Item): Emit an + error when the input item comes from the related package. + +2013-10-15 Arnaud Charlet + + * exp_ch11.adb (Expand_Exception_Handlers): Restrict previous + change. + 2013-10-14 Tristan Gingold * gcc-interface/gigi.h (standard_datatypes): Add diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index e4479070955..3cabec95077 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -3953,8 +3953,6 @@ __gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) #include #elif 0 && defined (__linux__) #include -#elif defined (_AIX) -#include #endif const void * @@ -3969,28 +3967,6 @@ __gnat_get_executable_load_address (void) return (const void *)map->l_addr; -#elif defined (_AIX) - /* Unfortunately, AIX wants to return the info for all loaded objects, - so we need to increase the buffer if too small. */ - size_t blen = 4096; - int status; - - while (1) - { - char buf[blen]; - - status = loadquery (L_GETINFO, buf, blen); - if (status == 0) - { - struct ld_info *info = (struct ld_info *)buf; - return info->ldinfo_textorg; - } - blen = blen * 2; - - /* Avoid stack overflow. */ - if (blen > 40 * 1024) - return (const void *)-1; - } #else return NULL; #endif diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index e58e5b22f67..9d72485773b 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -376,7 +376,7 @@ package body Exp_Aggr is -- Start of processing for Aggr_Size_OK begin - -- The normal aggregate limit is 5000, but we increase this limit to + -- The normal aggregate limit is 50000, but we increase this limit to -- 2**24 (about 16 million) if Restrictions (No_Elaboration_Code) or -- Restrictions (No_Implicit_Loops) is specified, since in either case -- we are at risk of declaring the program illegal because of this @@ -389,10 +389,14 @@ package body Exp_Aggr is -- efficient to construct a one-dimensional equivalent array with static -- components. + -- Conversely, we decrease the maximum size if none of the above + -- requirements apply, and if the aggregate has a single component + -- association, which will be more efficient if implemented with a loop. + -- Finally, we use a small limit in CodePeer mode where we favor loops -- instead of thousands of single assignments (from large aggregates). - Max_Aggr_Size := 5000; + Max_Aggr_Size := 50000; if CodePeer_Mode then Max_Aggr_Size := 100; @@ -404,6 +408,11 @@ package body Exp_Aggr is and then Static_Elaboration_Desired (Current_Scope))) then Max_Aggr_Size := 2 ** 24; + + elsif No (Expressions (N)) + and then No (Next (First (Component_Associations (N)))) + then + Max_Aggr_Size := 5000; end if; Siz := Component_Count (Component_Type (Typ)); diff --git a/gcc/ada/exp_ch11.adb b/gcc/ada/exp_ch11.adb index c5abb228a17..90628a05a79 100644 --- a/gcc/ada/exp_ch11.adb +++ b/gcc/ada/exp_ch11.adb @@ -1029,7 +1029,8 @@ package body Exp_Ch11 is -- will insert a call to initialize the choice parameter. if Present (Choice_Parameter (Handler)) - and then Exception_Mechanism /= Back_End_Exceptions + and then (Exception_Mechanism /= Back_End_Exceptions + or else CodePeer_Mode) then declare Cparm : constant Entity_Id := Choice_Parameter (Handler); diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 69df1759b55..9e0d2ede1ed 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -2353,9 +2353,9 @@ package body Sem_Prag is if Ekind_In (Input_Id, E_Abstract_State, E_Variable) then -- The input cannot denote states or variables declared - -- within the visible declarations of the package. + -- within the related package. - if Contains (States_And_Vars, Input_Id) then + if In_Same_Code_Unit (Item, Input) then Error_Msg_Name_1 := Chars (Pack_Id); Error_Msg_NE ("input item & cannot denote a visible variable or " -- 2.30.2