Commit b9ec8463 by Arnaud Charlet

[multiple changes]

2013-10-15  Tristan Gingold  <gingold@adacore.com>

	* adaint.c (__gnat_get_executable_load_address): Remove AIX
	specific code.

2013-10-15  Ed Schonberg  <schonberg@adacore.com>

	* 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  <kirtchev@adacore.com>

	* sem_prag.adb (Analyze_Input_Item): Emit an
	error when the input item comes from the related package.

2013-10-15  Arnaud Charlet  <charlet@adacore.com>

	* exp_ch11.adb (Expand_Exception_Handlers): Restrict previous
	change.

From-SVN: r203593
parent 24f161fd
2013-10-15 Tristan Gingold <gingold@adacore.com>
* adaint.c (__gnat_get_executable_load_address): Remove AIX
specific code.
2013-10-15 Ed Schonberg <schonberg@adacore.com>
* 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 <kirtchev@adacore.com>
* sem_prag.adb (Analyze_Input_Item): Emit an
error when the input item comes from the related package.
2013-10-15 Arnaud Charlet <charlet@adacore.com>
* exp_ch11.adb (Expand_Exception_Handlers): Restrict previous
change.
2013-10-14 Tristan Gingold <gingold@adacore.com> 2013-10-14 Tristan Gingold <gingold@adacore.com>
* gcc-interface/gigi.h (standard_datatypes): Add * gcc-interface/gigi.h (standard_datatypes): Add
......
...@@ -3953,8 +3953,6 @@ __gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) ...@@ -3953,8 +3953,6 @@ __gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set)
#include <mach-o/dyld.h> #include <mach-o/dyld.h>
#elif 0 && defined (__linux__) #elif 0 && defined (__linux__)
#include <link.h> #include <link.h>
#elif defined (_AIX)
#include <sys/ldr.h>
#endif #endif
const void * const void *
...@@ -3969,28 +3967,6 @@ __gnat_get_executable_load_address (void) ...@@ -3969,28 +3967,6 @@ __gnat_get_executable_load_address (void)
return (const void *)map->l_addr; 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 #else
return NULL; return NULL;
#endif #endif
......
...@@ -376,7 +376,7 @@ package body Exp_Aggr is ...@@ -376,7 +376,7 @@ package body Exp_Aggr is
-- Start of processing for Aggr_Size_OK -- Start of processing for Aggr_Size_OK
begin 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 -- 2**24 (about 16 million) if Restrictions (No_Elaboration_Code) or
-- Restrictions (No_Implicit_Loops) is specified, since in either case -- Restrictions (No_Implicit_Loops) is specified, since in either case
-- we are at risk of declaring the program illegal because of this -- we are at risk of declaring the program illegal because of this
...@@ -389,10 +389,14 @@ package body Exp_Aggr is ...@@ -389,10 +389,14 @@ package body Exp_Aggr is
-- efficient to construct a one-dimensional equivalent array with static -- efficient to construct a one-dimensional equivalent array with static
-- components. -- 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 -- Finally, we use a small limit in CodePeer mode where we favor loops
-- instead of thousands of single assignments (from large aggregates). -- instead of thousands of single assignments (from large aggregates).
Max_Aggr_Size := 5000; Max_Aggr_Size := 50000;
if CodePeer_Mode then if CodePeer_Mode then
Max_Aggr_Size := 100; Max_Aggr_Size := 100;
...@@ -404,6 +408,11 @@ package body Exp_Aggr is ...@@ -404,6 +408,11 @@ package body Exp_Aggr is
and then Static_Elaboration_Desired (Current_Scope))) and then Static_Elaboration_Desired (Current_Scope)))
then then
Max_Aggr_Size := 2 ** 24; Max_Aggr_Size := 2 ** 24;
elsif No (Expressions (N))
and then No (Next (First (Component_Associations (N))))
then
Max_Aggr_Size := 5000;
end if; end if;
Siz := Component_Count (Component_Type (Typ)); Siz := Component_Count (Component_Type (Typ));
......
...@@ -1029,7 +1029,8 @@ package body Exp_Ch11 is ...@@ -1029,7 +1029,8 @@ package body Exp_Ch11 is
-- will insert a call to initialize the choice parameter. -- will insert a call to initialize the choice parameter.
if Present (Choice_Parameter (Handler)) if Present (Choice_Parameter (Handler))
and then Exception_Mechanism /= Back_End_Exceptions and then (Exception_Mechanism /= Back_End_Exceptions
or else CodePeer_Mode)
then then
declare declare
Cparm : constant Entity_Id := Choice_Parameter (Handler); Cparm : constant Entity_Id := Choice_Parameter (Handler);
......
...@@ -2353,9 +2353,9 @@ package body Sem_Prag is ...@@ -2353,9 +2353,9 @@ package body Sem_Prag is
if Ekind_In (Input_Id, E_Abstract_State, E_Variable) then if Ekind_In (Input_Id, E_Abstract_State, E_Variable) then
-- The input cannot denote states or variables declared -- 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_Name_1 := Chars (Pack_Id);
Error_Msg_NE Error_Msg_NE
("input item & cannot denote a visible variable or " ("input item & cannot denote a visible variable or "
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment