Commit 67645bde by Arnaud Charlet

[multiple changes]

2011-08-31  Jose Ruiz  <ruiz@adacore.com>

	* aspects.ads (Aspect_Id, Aspect_Argument, Aspect_Names): Add the
	dispatching domain aspect.
	* aspects.adb (Canonical_Aspect): Add entry for the dispatching domain
	aspect.
	* sem_ch13.adb (Analyze_Aspect_Specifications): Analyze the
	Dispatching_Domain aspect in a similar way as we do for the Priority
	aspect.
	* exp_ch9.adb (Expand_N_Task_Type_Declaration): Add the
	Dispatching_Domain component if a Dispatching_Domain pragma or aspect
	is present.
	(Make_Task_Create_Call): Add the Dispatching_Domain when creating a task
	* par-prag.adb (Prag): Add Pragma_Dispatching_Domain as a known pragma.
	* sem_prag.adb (Analyze_Pragma): Check the correctness of a pragma
	Dispatching_Domain and add it to the task definition.
	(Sig_Flags): Add Pragma_Dispatching_Domain.
	* rtsfind.ads, rtsfind.adb (RTU_Id, RE_Id, Get_Unit_Name): Add the
	support to find the types Dispatching_Domain and
	Dispatching_Domain_Access.
	* sinfo.ads, sinfo.adb (Has_Pragma_Dispatching_Domain,
	Set_Has_Pragma_Dispatching_Domain): Add these subprograms to set and
	query the availability of a pragma Dispatching_Domain.
	* snames.ads-tmpl (Name_uDispatching_Domain): Add this name required by
	the expander to pass the Dispatching_Domain when creating a task.
	(Name_Dispatching_Domain): Add this new name for a pragma.
	(Pragma_Id): Add the new Pragma_Dispatching_Domain.
	* s-tassta.ads, s-tassta.adb (Create_Task): Set the domain to which the
	task has been allocated at creation time.
	* s-tarest.adb (Create_Restricted_Task): The dispatching domain using
	Ravenscar is always null.
	* s-taskin.ads, s-taskin.adb (Initialize_ATCB): Set the domain to which
	the task has been allocated at creation time.
	* s-tporft.adb (Register_Foreign_Thread): A foreign task will not have
	a specific dispatching domain.
	* s-taprop-linux.adb, s-taprop-solaris.adb, s-taprop-vxworks.adb,
	s-taprop-mingw.adb (Create_Task): Check whether both Dispatching_Domain
	and CPU are specified for the task, and the CPU value is not contained
	within the range of processors for the domain.

2011-08-31  Vincent Celier  <celier@adacore.com>

	* make.adb (Original_Gcc) : New constant String_Access.
	(Gnatmake): For VM targets, do not use VM version of the compiler if
	--GCC= has been specified.

2011-08-31  Thomas Quinot  <quinot@adacore.com>

	* sem_ch5.adb: Minor reformatting.

2011-08-31  Ed Schonberg  <schonberg@adacore.com>

	* exp_pakd.adb (Convert_To_PAT_Type): If prefix is a function call, do
	not reanalyze it.

2011-08-31  Bob Duff  <duff@adacore.com>

	* exp_ch4.adb (Expand_N_Selected_Component): Use the full type, in case
	the access type is private; we don't care about privacy in expansion.

2011-08-31  Ed Schonberg  <schonberg@adacore.com>

	* sem_aggr.adb (Resolve_Aggregate): In an instance, ignore aggregate
	subcomponents tnat may be limited, because they originate in view
	conflicts. If the original aggregate is legal and the actuals are
	legal, the aggregate itself is legal.

From-SVN: r178371
parent b8789727
2011-08-31 Jose Ruiz <ruiz@adacore.com>
* aspects.ads (Aspect_Id, Aspect_Argument, Aspect_Names): Add the
dispatching domain aspect.
* aspects.adb (Canonical_Aspect): Add entry for the dispatching domain
aspect.
* sem_ch13.adb (Analyze_Aspect_Specifications): Analyze the
Dispatching_Domain aspect in a similar way as we do for the Priority
aspect.
* exp_ch9.adb (Expand_N_Task_Type_Declaration): Add the
Dispatching_Domain component if a Dispatching_Domain pragma or aspect
is present.
(Make_Task_Create_Call): Add the Dispatching_Domain when creating a task
* par-prag.adb (Prag): Add Pragma_Dispatching_Domain as a known pragma.
* sem_prag.adb (Analyze_Pragma): Check the correctness of a pragma
Dispatching_Domain and add it to the task definition.
(Sig_Flags): Add Pragma_Dispatching_Domain.
* rtsfind.ads, rtsfind.adb (RTU_Id, RE_Id, Get_Unit_Name): Add the
support to find the types Dispatching_Domain and
Dispatching_Domain_Access.
* sinfo.ads, sinfo.adb (Has_Pragma_Dispatching_Domain,
Set_Has_Pragma_Dispatching_Domain): Add these subprograms to set and
query the availability of a pragma Dispatching_Domain.
* snames.ads-tmpl (Name_uDispatching_Domain): Add this name required by
the expander to pass the Dispatching_Domain when creating a task.
(Name_Dispatching_Domain): Add this new name for a pragma.
(Pragma_Id): Add the new Pragma_Dispatching_Domain.
* s-tassta.ads, s-tassta.adb (Create_Task): Set the domain to which the
task has been allocated at creation time.
* s-tarest.adb (Create_Restricted_Task): The dispatching domain using
Ravenscar is always null.
* s-taskin.ads, s-taskin.adb (Initialize_ATCB): Set the domain to which
the task has been allocated at creation time.
* s-tporft.adb (Register_Foreign_Thread): A foreign task will not have
a specific dispatching domain.
* s-taprop-linux.adb, s-taprop-solaris.adb, s-taprop-vxworks.adb,
s-taprop-mingw.adb (Create_Task): Check whether both Dispatching_Domain
and CPU are specified for the task, and the CPU value is not contained
within the range of processors for the domain.
2011-08-31 Vincent Celier <celier@adacore.com>
* make.adb (Original_Gcc) : New constant String_Access.
(Gnatmake): For VM targets, do not use VM version of the compiler if
--GCC= has been specified.
2011-08-31 Thomas Quinot <quinot@adacore.com>
* sem_ch5.adb: Minor reformatting.
2011-08-31 Ed Schonberg <schonberg@adacore.com>
* exp_pakd.adb (Convert_To_PAT_Type): If prefix is a function call, do
not reanalyze it.
2011-08-31 Bob Duff <duff@adacore.com>
* exp_ch4.adb (Expand_N_Selected_Component): Use the full type, in case
the access type is private; we don't care about privacy in expansion.
2011-08-31 Ed Schonberg <schonberg@adacore.com>
* sem_aggr.adb (Resolve_Aggregate): In an instance, ignore aggregate
subcomponents tnat may be limited, because they originate in view
conflicts. If the original aggregate is legal and the actuals are
legal, the aggregate itself is legal.
2011-08-31 Matthew Heaney <heaney@adacore.com> 2011-08-31 Matthew Heaney <heaney@adacore.com>
* a-rbtgbo.adb (Clear_Tree): Assert representation invariant for lock * a-rbtgbo.adb (Clear_Tree): Assert representation invariant for lock
......
...@@ -223,6 +223,7 @@ package body Aspects is ...@@ -223,6 +223,7 @@ package body Aspects is
Aspect_Default_Iterator => Aspect_Default_Iterator, Aspect_Default_Iterator => Aspect_Default_Iterator,
Aspect_Default_Value => Aspect_Default_Value, Aspect_Default_Value => Aspect_Default_Value,
Aspect_Discard_Names => Aspect_Discard_Names, Aspect_Discard_Names => Aspect_Discard_Names,
Aspect_Dispatching_Domain => Aspect_Dispatching_Domain,
Aspect_Dynamic_Predicate => Aspect_Predicate, Aspect_Dynamic_Predicate => Aspect_Predicate,
Aspect_External_Tag => Aspect_External_Tag, Aspect_External_Tag => Aspect_External_Tag,
Aspect_Favor_Top_Level => Aspect_Favor_Top_Level, Aspect_Favor_Top_Level => Aspect_Favor_Top_Level,
......
...@@ -53,6 +53,7 @@ package Aspects is ...@@ -53,6 +53,7 @@ package Aspects is
Aspect_Default_Component_Value, Aspect_Default_Component_Value,
Aspect_Default_Iterator, Aspect_Default_Iterator,
Aspect_Default_Value, Aspect_Default_Value,
Aspect_Dispatching_Domain,
Aspect_Dynamic_Predicate, Aspect_Dynamic_Predicate,
Aspect_External_Tag, Aspect_External_Tag,
Aspect_Implicit_Dereference, Aspect_Implicit_Dereference,
...@@ -190,6 +191,7 @@ package Aspects is ...@@ -190,6 +191,7 @@ package Aspects is
Aspect_Default_Component_Value => Expression, Aspect_Default_Component_Value => Expression,
Aspect_Default_Iterator => Name, Aspect_Default_Iterator => Name,
Aspect_Default_Value => Expression, Aspect_Default_Value => Expression,
Aspect_Dispatching_Domain => Expression,
Aspect_Dynamic_Predicate => Expression, Aspect_Dynamic_Predicate => Expression,
Aspect_External_Tag => Expression, Aspect_External_Tag => Expression,
Aspect_Implicit_Dereference => Name, Aspect_Implicit_Dereference => Name,
...@@ -250,6 +252,7 @@ package Aspects is ...@@ -250,6 +252,7 @@ package Aspects is
Aspect_Default_Value => Name_Default_Value, Aspect_Default_Value => Name_Default_Value,
Aspect_Default_Component_Value => Name_Default_Component_Value, Aspect_Default_Component_Value => Name_Default_Component_Value,
Aspect_Discard_Names => Name_Discard_Names, Aspect_Discard_Names => Name_Discard_Names,
Aspect_Dispatching_Domain => Name_Dispatching_Domain,
Aspect_Dynamic_Predicate => Name_Dynamic_Predicate, Aspect_Dynamic_Predicate => Name_Dynamic_Predicate,
Aspect_Elaborate_Body => Name_Elaborate_Body, Aspect_Elaborate_Body => Name_Elaborate_Body,
Aspect_External_Tag => Name_External_Tag, Aspect_External_Tag => Name_External_Tag,
......
...@@ -7920,6 +7920,7 @@ package body Exp_Ch4 is ...@@ -7920,6 +7920,7 @@ package body Exp_Ch4 is
-- Insert explicit dereference if required -- Insert explicit dereference if required
if Is_Access_Type (Ptyp) then if Is_Access_Type (Ptyp) then
Set_Etype (P, Ptyp); -- in case it's private
Insert_Explicit_Dereference (P); Insert_Explicit_Dereference (P);
Analyze_And_Resolve (P, Designated_Type (Ptyp)); Analyze_And_Resolve (P, Designated_Type (Ptyp));
......
...@@ -10422,12 +10422,14 @@ package body Exp_Ch9 is ...@@ -10422,12 +10422,14 @@ package body Exp_Ch9 is
-- values of this task. The general form of this type declaration is -- values of this task. The general form of this type declaration is
-- type taskV (discriminants) is record -- type taskV (discriminants) is record
-- _Task_Id : Task_Id; -- _Task_Id : Task_Id;
-- entry_family : array (bounds) of Void; -- entry_family : array (bounds) of Void;
-- _Priority : Integer := priority_expression; -- _Priority : Integer := priority_expression;
-- _Size : Size_Type := Size_Type (size_expression); -- _Size : Size_Type := size_expression;
-- _Task_Info : Task_Info_Type := task_info_expression; -- _Task_Info : Task_Info_Type := task_info_expression;
-- _CPU : Integer := cpu_range_expression; -- _CPU : Integer := cpu_range_expression;
-- _Relative_Deadline : Time_Span := time_span_expression;
-- _Domain : Dispatching_Domain := dd_expression;
-- end record; -- end record;
-- The discriminants are present only if the corresponding task type has -- The discriminants are present only if the corresponding task type has
...@@ -10471,6 +10473,11 @@ package body Exp_Ch9 is ...@@ -10471,6 +10473,11 @@ package body Exp_Ch9 is
-- argument that was present in the pragma, and is used to provide the -- argument that was present in the pragma, and is used to provide the
-- Relative_Deadline parameter to the call to Create_Task. -- Relative_Deadline parameter to the call to Create_Task.
-- The _Domain field is present only if a Dispatching_Domain pragma or
-- aspect appears in the task definition. The expression captures the
-- argument that was present in the pragma or aspect, and is used to
-- provide the Dispatching_Domain parameter to the call to Create_Task.
-- When a task is declared, an instance of the task value record is -- When a task is declared, an instance of the task value record is
-- created. The elaboration of this declaration creates the correct bounds -- created. The elaboration of this declaration creates the correct bounds
-- for the entry families, and also evaluates the size, priority, and -- for the entry families, and also evaluates the size, priority, and
...@@ -10833,6 +10840,36 @@ package body Exp_Ch9 is ...@@ -10833,6 +10840,36 @@ package body Exp_Ch9 is
(Taskdef, Name_Relative_Deadline)))))))); (Taskdef, Name_Relative_Deadline))))))));
end if; end if;
-- Add the _Dispatching_Domain component if a Dispatching_Domain pragma
-- or aspect is present. If we are using a restricted run time this
-- component will not be added (dispatching domains are not allowed by
-- the Ravenscar profile).
if not Restricted_Profile
and then Present (Taskdef)
and then Has_Pragma_Dispatching_Domain (Taskdef)
then
Append_To (Cdecls,
Make_Component_Declaration (Loc,
Defining_Identifier =>
Make_Defining_Identifier (Loc, Name_uDispatching_Domain),
Component_Definition =>
Make_Component_Definition (Loc,
Aliased_Present => False,
Subtype_Indication =>
New_Reference_To
(RTE (RE_Dispatching_Domain_Access), Loc)),
Expression =>
Unchecked_Convert_To (RTE (RE_Dispatching_Domain_Access),
Relocate_Node (
Expression (First (
Pragma_Argument_Associations (
Find_Task_Or_Protected_Pragma
(Taskdef, Name_Dispatching_Domain))))))));
end if;
Insert_After (Size_Decl, Rec_Decl); Insert_After (Size_Decl, Rec_Decl);
-- Analyze the record declaration immediately after construction, -- Analyze the record declaration immediately after construction,
...@@ -12782,6 +12819,31 @@ package body Exp_Ch9 is ...@@ -12782,6 +12819,31 @@ package body Exp_Ch9 is
New_Reference_To (RTE (RE_Time_Span_Zero), Loc)); New_Reference_To (RTE (RE_Time_Span_Zero), Loc));
end if; end if;
-- Dispatching_Domain parameter. If no Dispatching_Domain pragma or
-- aspect is present, then the dispatching domain is null. If a
-- pragma or aspect is present, then the dispatching domain is taken
-- from the _Dispatching_Domain field of the task value record,
-- which was set from the pragma value. Note that this parameter
-- must not be generated for the restricted profiles since Ravenscar
-- does not allow dispatching domains.
-- Case where pragma or aspect Dispatching_Domain applies: use given
-- value.
if Present (Tdef) and then Has_Pragma_Dispatching_Domain (Tdef) then
Append_To (Args,
Make_Selected_Component (Loc,
Prefix =>
Make_Identifier (Loc, Name_uInit),
Selector_Name =>
Make_Identifier (Loc, Name_uDispatching_Domain)));
-- No pragma or aspect Dispatching_Domain apply to the task
else
Append_To (Args, Make_Null (Loc));
end if;
-- Number of entries. This is an expression of the form: -- Number of entries. This is an expression of the form:
-- n + _Init.a'Length + _Init.a'B'Length + ... -- n + _Init.a'Length + _Init.a'B'Length + ...
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -702,7 +702,9 @@ package body Exp_Pakd is ...@@ -702,7 +702,9 @@ package body Exp_Pakd is
-- see Reset_Packed_Prefix. On the other hand, if the prefix is a simple -- see Reset_Packed_Prefix. On the other hand, if the prefix is a simple
-- array reference, reanalysis can produce spurious type errors when the -- array reference, reanalysis can produce spurious type errors when the
-- PAT type is replaced again with the original type of the array. Same -- PAT type is replaced again with the original type of the array. Same
-- for the case of a dereference. The following is correct and minimal, -- for the case of a dereference. Ditto for function calls: expansion
-- may introduce additional actuals which will trigger errors if call
-- is reanalyzed. The following is correct and minimal,
-- but the handling of more complex packed expressions in actuals is -- but the handling of more complex packed expressions in actuals is
-- confused. Probably the problem only remains for actuals in calls. -- confused. Probably the problem only remains for actuals in calls.
...@@ -713,6 +715,7 @@ package body Exp_Pakd is ...@@ -713,6 +715,7 @@ package body Exp_Pakd is
(Nkind (Aexp) = N_Indexed_Component (Nkind (Aexp) = N_Indexed_Component
and then Is_Entity_Name (Prefix (Aexp))) and then Is_Entity_Name (Prefix (Aexp)))
or else Nkind (Aexp) = N_Explicit_Dereference or else Nkind (Aexp) = N_Explicit_Dereference
or else Nkind (Aexp) = N_Function_Call
then then
Set_Analyzed (Aexp); Set_Analyzed (Aexp);
end if; end if;
......
...@@ -671,7 +671,12 @@ package body Make is ...@@ -671,7 +671,12 @@ package body Make is
-- Compiler, Binder & Linker Data and Subprograms -- -- Compiler, Binder & Linker Data and Subprograms --
---------------------------------------------------- ----------------------------------------------------
Gcc : String_Access := Program_Name ("gcc", "gnatmake"); Gcc : String_Access := Program_Name ("gcc", "gnatmake");
Original_Gcc : constant String_Access := Gcc;
-- Original_Gcc is used to check if Gcc has been modified by a switch
-- --GCC=, so that for VM platforms, it is not modified again, as it can
-- result in incorrect error messages if the compiler cannot be found.
Gnatbind : String_Access := Program_Name ("gnatbind", "gnatmake"); Gnatbind : String_Access := Program_Name ("gnatbind", "gnatmake");
Gnatlink : String_Access := Program_Name ("gnatlink", "gnatmake"); Gnatlink : String_Access := Program_Name ("gnatlink", "gnatmake");
-- Default compiler, binder, linker programs -- Default compiler, binder, linker programs
...@@ -5973,10 +5978,6 @@ package body Make is ...@@ -5973,10 +5978,6 @@ package body Make is
Gnatlink := Saved_Gnatlink; Gnatlink := Saved_Gnatlink;
end if; end if;
Gcc_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gcc.all);
Gnatbind_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gnatbind.all);
Gnatlink_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gnatlink.all);
Bad_Compilation.Init; Bad_Compilation.Init;
-- If project files are used, create the mapping of all the sources, so -- If project files are used, create the mapping of all the sources, so
...@@ -6068,16 +6069,29 @@ package body Make is ...@@ -6068,16 +6069,29 @@ package body Make is
-- instead. -- instead.
Check_Object_Consistency := False; Check_Object_Consistency := False;
Gcc := new String'("jvm-gnatcompile");
-- Do not modify Gcc is --GCC= was specified
if Gcc = Original_Gcc then
Gcc := new String'("jvm-gnatcompile");
end if;
when Targparm.CLI_Target => when Targparm.CLI_Target =>
Gcc := new String'("dotnet-gnatcompile"); -- Do not modify Gcc is --GCC= was specified
if Gcc = Original_Gcc then
Gcc := new String'("dotnet-gnatcompile");
end if;
when Targparm.No_VM => when Targparm.No_VM =>
raise Program_Error; raise Program_Error;
end case; end case;
end if; end if;
Gcc_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gcc.all);
Gnatbind_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gnatbind.all);
Gnatlink_Path := GNAT.OS_Lib.Locate_Exec_On_Path (Gnatlink.all);
-- If we have specified -j switch both from the project file -- If we have specified -j switch both from the project file
-- and on the command line, the one from the command line takes -- and on the command line, the one from the command line takes
-- precedence. -- precedence.
......
...@@ -1128,6 +1128,7 @@ begin ...@@ -1128,6 +1128,7 @@ begin
Pragma_Default_Storage_Pool | Pragma_Default_Storage_Pool |
Pragma_Dimension | Pragma_Dimension |
Pragma_Discard_Names | Pragma_Discard_Names |
Pragma_Dispatching_Domain |
Pragma_Eliminate | Pragma_Eliminate |
Pragma_Elaborate | Pragma_Elaborate |
Pragma_Elaborate_All | Pragma_Elaborate_All |
......
...@@ -321,6 +321,10 @@ package body Rtsfind is ...@@ -321,6 +321,10 @@ package body Rtsfind is
elsif U_Id in System_Child then elsif U_Id in System_Child then
Name_Buffer (7) := '.'; Name_Buffer (7) := '.';
if U_Id in System_Multiprocessors_Child then
Name_Buffer (23) := '.';
end if;
if U_Id in System_Storage_Pools_Child then if U_Id in System_Storage_Pools_Child then
Name_Buffer (21) := '.'; Name_Buffer (21) := '.';
end if; end if;
......
...@@ -371,6 +371,10 @@ package Rtsfind is ...@@ -371,6 +371,10 @@ package Rtsfind is
System_WWd_Enum, System_WWd_Enum,
System_WWd_Wchar, System_WWd_Wchar,
-- Children of System.Multiprocessors
System_Multiprocessors_Dispatching_Domains,
-- Children of System.Storage_Pools -- Children of System.Storage_Pools
System_Storage_Pools_Subpools, System_Storage_Pools_Subpools,
...@@ -440,6 +444,11 @@ package Rtsfind is ...@@ -440,6 +444,11 @@ package Rtsfind is
range System_Address_Image .. System_Tasking_Stages; range System_Address_Image .. System_Tasking_Stages;
-- Range of values for children or grandchildren of System -- Range of values for children or grandchildren of System
subtype System_Multiprocessors_Child is RTU_Id
range System_Multiprocessors_Dispatching_Domains ..
System_Multiprocessors_Dispatching_Domains;
-- Range of values for children of System.Multiprocessors
subtype System_Storage_Pools_Child is RTU_Id subtype System_Storage_Pools_Child is RTU_Id
range System_Storage_Pools_Subpools .. System_Storage_Pools_Subpools; range System_Storage_Pools_Subpools .. System_Storage_Pools_Subpools;
...@@ -1446,6 +1455,8 @@ package Rtsfind is ...@@ -1446,6 +1455,8 @@ package Rtsfind is
RE_Unspecified_CPU, -- System.Tasking RE_Unspecified_CPU, -- System.Tasking
RE_Dispatching_Domain_Access, -- System.Tasking
RE_Abort_Defer, -- System.Soft_Links RE_Abort_Defer, -- System.Soft_Links
RE_Abort_Undefer, -- System.Soft_Links RE_Abort_Undefer, -- System.Soft_Links
RE_Complete_Master, -- System.Soft_Links RE_Complete_Master, -- System.Soft_Links
...@@ -1588,6 +1599,8 @@ package Rtsfind is ...@@ -1588,6 +1599,8 @@ package Rtsfind is
RE_Width_Wide_Character, -- System.Wid_WChar RE_Width_Wide_Character, -- System.Wid_WChar
RE_Width_Wide_Wide_Character, -- System.Wid_WChar RE_Width_Wide_Wide_Character, -- System.Wid_WChar
RE_Dispatching_Domain, -- Dispatching_Domains
RE_Protected_Entry_Body_Array, -- Tasking.Protected_Objects.Entries RE_Protected_Entry_Body_Array, -- Tasking.Protected_Objects.Entries
RE_Protection_Entries, -- Tasking.Protected_Objects.Entries RE_Protection_Entries, -- Tasking.Protected_Objects.Entries
RE_Protection_Entries_Access, -- Tasking.Protected_Objects.Entries RE_Protection_Entries_Access, -- Tasking.Protected_Objects.Entries
...@@ -2635,6 +2648,8 @@ package Rtsfind is ...@@ -2635,6 +2648,8 @@ package Rtsfind is
RE_Unspecified_CPU => System_Tasking, RE_Unspecified_CPU => System_Tasking,
RE_Dispatching_Domain_Access => System_Tasking,
RE_Abort_Defer => System_Soft_Links, RE_Abort_Defer => System_Soft_Links,
RE_Abort_Undefer => System_Soft_Links, RE_Abort_Undefer => System_Soft_Links,
RE_Complete_Master => System_Soft_Links, RE_Complete_Master => System_Soft_Links,
...@@ -2778,6 +2793,9 @@ package Rtsfind is ...@@ -2778,6 +2793,9 @@ package Rtsfind is
RE_Width_Wide_Character => System_Wid_WChar, RE_Width_Wide_Character => System_Wid_WChar,
RE_Width_Wide_Wide_Character => System_Wid_WChar, RE_Width_Wide_Wide_Character => System_Wid_WChar,
RE_Dispatching_Domain =>
System_Multiprocessors_Dispatching_Domains,
RE_Protected_Entry_Body_Array => RE_Protected_Entry_Body_Array =>
System_Tasking_Protected_Objects_Entries, System_Tasking_Protected_Objects_Entries,
RE_Protection_Entries => RE_Protection_Entries =>
......
...@@ -818,6 +818,18 @@ package body System.Task_Primitives.Operations is ...@@ -818,6 +818,18 @@ package body System.Task_Primitives.Operations is
use type System.Multiprocessors.CPU_Range; use type System.Multiprocessors.CPU_Range;
begin begin
-- Check whether both Dispatching_Domain and CPU are specified for the
-- task, and the CPU value is not contained within the range of
-- processors for the domain.
if T.Common.Domain /= null and then
(T.Common.Base_CPU not in T.Common.Domain'Range
or else not T.Common.Domain (T.Common.Base_CPU))
then
Succeeded := False;
return;
end if;
Adjusted_Stack_Size := Adjusted_Stack_Size :=
Interfaces.C.size_t (Stack_Size + Alternate_Stack_Size); Interfaces.C.size_t (Stack_Size + Alternate_Stack_Size);
......
...@@ -895,9 +895,19 @@ package body System.Task_Primitives.Operations is ...@@ -895,9 +895,19 @@ package body System.Task_Primitives.Operations is
Result : DWORD; Result : DWORD;
Entry_Point : PTHREAD_START_ROUTINE; Entry_Point : PTHREAD_START_ROUTINE;
use type System.Multiprocessors.CPU_Range;
begin begin
-- Check whether both Dispatching_Domain and CPU are specified for the
-- task, and the CPU value is not contained within the range of
-- processors for the domain.
if T.Common.Domain /= null and then
(T.Common.Base_CPU not in T.Common.Domain'Range
or else not T.Common.Domain (T.Common.Base_CPU))
then
Succeeded := False;
return;
end if;
pTaskParameter := To_Address (T); pTaskParameter := To_Address (T);
Entry_Point := To_PTHREAD_START_ROUTINE (Wrapper); Entry_Point := To_PTHREAD_START_ROUTINE (Wrapper);
......
...@@ -976,6 +976,18 @@ package body System.Task_Primitives.Operations is ...@@ -976,6 +976,18 @@ package body System.Task_Primitives.Operations is
use System.Task_Info; use System.Task_Info;
begin begin
-- Check whether both Dispatching_Domain and CPU are specified for the
-- task, and the CPU value is not contained within the range of
-- processors for the domain.
if T.Common.Domain /= null and then
(T.Common.Base_CPU not in T.Common.Domain'Range
or else not T.Common.Domain (T.Common.Base_CPU))
then
Succeeded := False;
return;
end if;
Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size + Page_Size); Adjusted_Stack_Size := Interfaces.C.size_t (Stack_Size + Page_Size);
-- Since the initial signal mask of a thread is inherited from the -- Since the initial signal mask of a thread is inherited from the
......
...@@ -891,6 +891,18 @@ package body System.Task_Primitives.Operations is ...@@ -891,6 +891,18 @@ package body System.Task_Primitives.Operations is
Adjusted_Stack_Size : size_t; Adjusted_Stack_Size : size_t;
begin begin
-- Check whether both Dispatching_Domain and CPU are specified for the
-- task, and the CPU value is not contained within the range of
-- processors for the domain.
if T.Common.Domain /= null and then
(T.Common.Base_CPU not in T.Common.Domain'Range
or else not T.Common.Domain (T.Common.Base_CPU))
then
Succeeded := False;
return;
end if;
-- Ask for four extra bytes of stack space so that the ATCB pointer can -- Ask for four extra bytes of stack space so that the ATCB pointer can
-- be stored below the stack limit, plus extra space for the frame of -- be stored below the stack limit, plus extra space for the frame of
-- Task_Wrapper. This is so the user gets the amount of stack requested -- Task_Wrapper. This is so the user gets the amount of stack requested
......
...@@ -505,11 +505,13 @@ package body System.Tasking.Restricted.Stages is ...@@ -505,11 +505,13 @@ package body System.Tasking.Restricted.Stages is
Write_Lock (Self_ID); Write_Lock (Self_ID);
-- With no task hierarchy, the parent of all non-Environment tasks that -- With no task hierarchy, the parent of all non-Environment tasks that
-- are created must be the Environment task -- are created must be the Environment task. Dispatching domains are
-- not allowed in Ravenscar, so the dispatching domain parameter will
-- always be null.
Initialize_ATCB Initialize_ATCB
(Self_ID, State, Discriminants, Self_ID, Elaborated, Base_Priority, (Self_ID, State, Discriminants, Self_ID, Elaborated, Base_Priority,
Base_CPU, Task_Info, Size, Created_Task, Success); Base_CPU, null, Task_Info, Size, Created_Task, Success);
-- If we do our job right then there should never be any failures, which -- If we do our job right then there should never be any failures, which
-- was probably said about the Titanic; so just to be safe, let's retain -- was probably said about the Titanic; so just to be safe, let's retain
......
...@@ -99,6 +99,7 @@ package body System.Tasking is ...@@ -99,6 +99,7 @@ package body System.Tasking is
Elaborated : Access_Boolean; Elaborated : Access_Boolean;
Base_Priority : System.Any_Priority; Base_Priority : System.Any_Priority;
Base_CPU : System.Multiprocessors.CPU_Range; Base_CPU : System.Multiprocessors.CPU_Range;
Domain : Dispatching_Domain_Access;
Task_Info : System.Task_Info.Task_Info_Type; Task_Info : System.Task_Info.Task_Info_Type;
Stack_Size : System.Parameters.Size_Type; Stack_Size : System.Parameters.Size_Type;
T : Task_Id; T : Task_Id;
...@@ -121,6 +122,7 @@ package body System.Tasking is ...@@ -121,6 +122,7 @@ package body System.Tasking is
T.Common.Parent := Parent; T.Common.Parent := Parent;
T.Common.Base_Priority := Base_Priority; T.Common.Base_Priority := Base_Priority;
T.Common.Base_CPU := Base_CPU; T.Common.Base_CPU := Base_CPU;
T.Common.Domain := Domain;
T.Common.Current_Priority := 0; T.Common.Current_Priority := 0;
T.Common.Protected_Action_Nesting := 0; T.Common.Protected_Action_Nesting := 0;
T.Common.Call := null; T.Common.Call := null;
...@@ -209,7 +211,7 @@ package body System.Tasking is ...@@ -209,7 +211,7 @@ package body System.Tasking is
T := STPO.New_ATCB (0); T := STPO.New_ATCB (0);
Initialize_ATCB Initialize_ATCB
(null, null, Null_Address, Null_Task, null, Base_Priority, Base_CPU, (null, null, Null_Address, Null_Task, null, Base_Priority, Base_CPU,
Task_Info.Unspecified_Task_Info, 0, T, Success); null, Task_Info.Unspecified_Task_Info, 0, T, Success);
pragma Assert (Success); pragma Assert (Success);
STPO.Initialize (T); STPO.Initialize (T);
......
...@@ -1136,6 +1136,7 @@ package System.Tasking is ...@@ -1136,6 +1136,7 @@ package System.Tasking is
Elaborated : Access_Boolean; Elaborated : Access_Boolean;
Base_Priority : System.Any_Priority; Base_Priority : System.Any_Priority;
Base_CPU : System.Multiprocessors.CPU_Range; Base_CPU : System.Multiprocessors.CPU_Range;
Domain : Dispatching_Domain_Access;
Task_Info : System.Task_Info.Task_Info_Type; Task_Info : System.Task_Info.Task_Info_Type;
Stack_Size : System.Parameters.Size_Type; Stack_Size : System.Parameters.Size_Type;
T : Task_Id; T : Task_Id;
......
...@@ -475,6 +475,7 @@ package body System.Tasking.Stages is ...@@ -475,6 +475,7 @@ package body System.Tasking.Stages is
Task_Info : System.Task_Info.Task_Info_Type; Task_Info : System.Task_Info.Task_Info_Type;
CPU : Integer; CPU : Integer;
Relative_Deadline : Ada.Real_Time.Time_Span; Relative_Deadline : Ada.Real_Time.Time_Span;
Domain : Dispatching_Domain_Access;
Num_Entries : Task_Entry_Index; Num_Entries : Task_Entry_Index;
Master : Master_Level; Master : Master_Level;
State : Task_Procedure_Access; State : Task_Procedure_Access;
...@@ -591,7 +592,7 @@ package body System.Tasking.Stages is ...@@ -591,7 +592,7 @@ package body System.Tasking.Stages is
end if; end if;
Initialize_ATCB (Self_ID, State, Discriminants, P, Elaborated, Initialize_ATCB (Self_ID, State, Discriminants, P, Elaborated,
Base_Priority, Base_CPU, Task_Info, Size, T, Success); Base_Priority, Base_CPU, Domain, Task_Info, Size, T, Success);
if not Success then if not Success then
Free (T); Free (T);
...@@ -642,12 +643,13 @@ package body System.Tasking.Stages is ...@@ -642,12 +643,13 @@ package body System.Tasking.Stages is
T.Common.Task_Image_Len := Len; T.Common.Task_Image_Len := Len;
end if; end if;
-- ??? For the moment the task inherits the dispatching domain of the -- The task inherits the dispatching domain of the parent only if no
-- parent. It will change when support for the Dispatching_Domain -- specific domain has been defined in the spec of the task (using the
-- aspect will be added, because that will allow setting the domain -- dispatching domain pragma or aspect).
-- in the spec of the task.
if T.Common.Activator /= null then if T.Common.Domain /= null then
null;
elsif T.Common.Activator /= null then
T.Common.Domain := T.Common.Activator.Common.Domain; T.Common.Domain := T.Common.Activator.Common.Domain;
else else
T.Common.Domain := System.Tasking.System_Domain; T.Common.Domain := System.Tasking.System_Domain;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
-- -- -- --
-- GNARL is free software; you can redistribute it and/or modify it under -- -- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -172,6 +172,7 @@ package System.Tasking.Stages is ...@@ -172,6 +172,7 @@ package System.Tasking.Stages is
Task_Info : System.Task_Info.Task_Info_Type; Task_Info : System.Task_Info.Task_Info_Type;
CPU : Integer; CPU : Integer;
Relative_Deadline : Ada.Real_Time.Time_Span; Relative_Deadline : Ada.Real_Time.Time_Span;
Domain : Dispatching_Domain_Access;
Num_Entries : Task_Entry_Index; Num_Entries : Task_Entry_Index;
Master : Master_Level; Master : Master_Level;
State : Task_Procedure_Access; State : Task_Procedure_Access;
...@@ -195,6 +196,8 @@ package System.Tasking.Stages is ...@@ -195,6 +196,8 @@ package System.Tasking.Stages is
-- before setting the affinity at run time. -- before setting the affinity at run time.
-- Relative_Deadline is the relative deadline associated with the created -- Relative_Deadline is the relative deadline associated with the created
-- task by means of a pragma Relative_Deadline, or 0.0 if none. -- task by means of a pragma Relative_Deadline, or 0.0 if none.
-- Domain is the dispatching domain associated with the created task by
-- means of a Dispatching_Domain pragma or aspect, or null if none.
-- State is the compiler generated task's procedure body -- State is the compiler generated task's procedure body
-- Discriminants is a pointer to a limited record whose discriminants -- Discriminants is a pointer to a limited record whose discriminants
-- are those of the task to create. This parameter should be passed as -- are those of the task to create. This parameter should be passed as
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 2002-2010, Free Software Foundation, Inc. -- -- Copyright (C) 2002-2011, Free Software Foundation, Inc. --
-- -- -- --
-- GNARL is free software; you can redistribute it and/or modify it under -- -- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -65,7 +65,7 @@ begin ...@@ -65,7 +65,7 @@ begin
System.Tasking.Initialize_ATCB System.Tasking.Initialize_ATCB
(Self_Id, null, Null_Address, Null_Task, (Self_Id, null, Null_Address, Null_Task,
Foreign_Task_Elaborated'Access, Foreign_Task_Elaborated'Access,
System.Priority'First, System.Multiprocessors.Not_A_Specific_CPU, System.Priority'First, System.Multiprocessors.Not_A_Specific_CPU, null,
Task_Info.Unspecified_Task_Info, 0, Self_Id, Succeeded); Task_Info.Unspecified_Task_Info, 0, Self_Id, Succeeded);
Unlock_RTS; Unlock_RTS;
pragma Assert (Succeeded); pragma Assert (Succeeded);
......
...@@ -1052,8 +1052,14 @@ package body Sem_Aggr is ...@@ -1052,8 +1052,14 @@ package body Sem_Aggr is
end if; end if;
-- Ada 2005 (AI-287): Limited aggregates allowed -- Ada 2005 (AI-287): Limited aggregates allowed
-- In an instance, ignore aggregate subcomponents tnat may be limited,
-- because they originate in view conflicts. If the original aggregate
-- is legal and the actuals are legal, the aggregate itself is legal.
if Is_Limited_Type (Typ) and then Ada_Version < Ada_2005 then if Is_Limited_Type (Typ)
and then Ada_Version < Ada_2005
and then not In_Instance
then
Error_Msg_N ("aggregate type cannot be limited", N); Error_Msg_N ("aggregate type cannot be limited", N);
Explain_Limited_Type (Typ, N); Explain_Limited_Type (Typ, N);
......
...@@ -1149,29 +1149,36 @@ package body Sem_Ch13 is ...@@ -1149,29 +1149,36 @@ package body Sem_Ch13 is
pragma Assert (not Delay_Required); pragma Assert (not Delay_Required);
when Aspect_Priority | Aspect_Interrupt_Priority => declare when Aspect_Priority |
Pname : Name_Id; Aspect_Interrupt_Priority |
Aspect_Dispatching_Domain =>
declare
Pname : Name_Id;
begin
if A_Id = Aspect_Priority then
Pname := Name_Priority;
begin elsif A_Id = Aspect_Interrupt_Priority then
if A_Id = Aspect_Priority then Pname := Name_Interrupt_Priority;
Pname := Name_Priority;
else
Pname := Name_Interrupt_Priority;
end if;
Aitem := else
Make_Pragma (Loc, Pname := Name_Dispatching_Domain;
Pragma_Identifier => end if;
Make_Identifier (Sloc (Id), Pname),
Pragma_Argument_Associations =>
New_List
(Make_Pragma_Argument_Association
(Sloc (Id), Expression => Relocate_Node (Expr))));
Set_From_Aspect_Specification (Aitem, True); Aitem :=
Make_Pragma (Loc,
Pragma_Identifier =>
Make_Identifier (Sloc (Id), Pname),
Pragma_Argument_Associations =>
New_List
(Make_Pragma_Argument_Association
(Sloc => Sloc (Id),
Expression => Relocate_Node (Expr))));
pragma Assert (not Delay_Required); Set_From_Aspect_Specification (Aitem, True);
end;
pragma Assert (not Delay_Required);
end;
-- Aspects Pre/Post generate Precondition/Postcondition pragmas -- Aspects Pre/Post generate Precondition/Postcondition pragmas
-- with a first argument that is the expression, and a second -- with a first argument that is the expression, and a second
...@@ -1490,7 +1497,9 @@ package body Sem_Ch13 is ...@@ -1490,7 +1497,9 @@ package body Sem_Ch13 is
-- protected definition, which we need to create if it's -- protected definition, which we need to create if it's
-- not there. -- not there.
when Aspect_Priority | Aspect_Interrupt_Priority => when Aspect_Priority |
Aspect_Interrupt_Priority |
Aspect_Dispatching_Domain =>
declare declare
T : Node_Id; -- the type declaration T : Node_Id; -- the type declaration
L : List_Id; -- list of decls of task/protected L : List_Id; -- list of decls of task/protected
...@@ -1503,7 +1512,9 @@ package body Sem_Ch13 is ...@@ -1503,7 +1512,9 @@ package body Sem_Ch13 is
T := N; T := N;
end if; end if;
if Nkind (T) = N_Protected_Type_Declaration then if Nkind (T) = N_Protected_Type_Declaration
and then A_Id /= Aspect_Dispatching_Domain
then
pragma Assert pragma Assert
(Present (Protected_Definition (T))); (Present (Protected_Definition (T)));
...@@ -1520,8 +1531,7 @@ package body Sem_Ch13 is ...@@ -1520,8 +1531,7 @@ package body Sem_Ch13 is
End_Label => Empty)); End_Label => Empty));
end if; end if;
L := Visible_Declarations L := Visible_Declarations (Task_Definition (T));
(Task_Definition (T));
else else
raise Program_Error; raise Program_Error;
...@@ -5880,6 +5890,9 @@ package body Sem_Ch13 is ...@@ -5880,6 +5890,9 @@ package body Sem_Ch13 is
when Aspect_Bit_Order => when Aspect_Bit_Order =>
T := RTE (RE_Bit_Order); T := RTE (RE_Bit_Order);
when Aspect_Dispatching_Domain =>
T := RTE (RE_Dispatching_Domain);
when Aspect_External_Tag => when Aspect_External_Tag =>
T := Standard_String; T := Standard_String;
......
...@@ -2058,7 +2058,7 @@ package body Sem_Ch5 is ...@@ -2058,7 +2058,7 @@ package body Sem_Ch5 is
end if; end if;
-- Set kind of loop parameter, which may be used in -- Set kind of loop parameter, which may be used in
-- the subsequent analysis of of the condition in a -- the subsequent analysis of the condition in a
-- quantified expression. -- quantified expression.
Set_Ekind (Id, E_Loop_Parameter); Set_Ekind (Id, E_Loop_Parameter);
......
...@@ -7866,6 +7866,54 @@ package body Sem_Prag is ...@@ -7866,6 +7866,54 @@ package body Sem_Prag is
end if; end if;
end Discard_Names; end Discard_Names;
------------------------
-- Dispatching_Domain --
------------------------
-- pragma Dispatching_Domain (EXPRESSION);
when Pragma_Dispatching_Domain => Dispatching_Domain : declare
P : constant Node_Id := Parent (N);
Arg : Node_Id;
begin
Ada_2012_Pragma;
Check_No_Identifiers;
Check_Arg_Count (1);
-- This pragma is born obsolete, but not the aspect
if not From_Aspect_Specification (N) then
Check_Restriction
(No_Obsolescent_Features, Pragma_Identifier (N));
end if;
if Nkind (P) = N_Task_Definition then
Arg := Get_Pragma_Arg (Arg1);
-- The expression must be analyzed in the special manner
-- described in "Handling of Default and Per-Object
-- Expressions" in sem.ads.
Preanalyze_Spec_Expression (Arg, RTE (RE_Dispatching_Domain));
-- Anything else is incorrect
else
Pragma_Misplaced;
end if;
if Has_Pragma_Dispatching_Domain (P) then
Error_Pragma ("duplicate pragma% not allowed");
else
Set_Has_Pragma_Dispatching_Domain (P, True);
if Nkind (P) = N_Task_Definition then
Record_Rep_Item (Defining_Identifier (Parent (P)), N);
end if;
end if;
end Dispatching_Domain;
--------------- ---------------
-- Elaborate -- -- Elaborate --
--------------- ---------------
...@@ -14462,6 +14510,7 @@ package body Sem_Prag is ...@@ -14462,6 +14510,7 @@ package body Sem_Prag is
Pragma_Default_Storage_Pool => -1, Pragma_Default_Storage_Pool => -1,
Pragma_Dimension => -1, Pragma_Dimension => -1,
Pragma_Discard_Names => 0, Pragma_Discard_Names => 0,
Pragma_Dispatching_Domain => -1,
Pragma_Elaborate => -1, Pragma_Elaborate => -1,
Pragma_Elaborate_All => -1, Pragma_Elaborate_All => -1,
Pragma_Elaborate_Body => -1, Pragma_Elaborate_Body => -1,
......
...@@ -1471,6 +1471,14 @@ package body Sinfo is ...@@ -1471,6 +1471,14 @@ package body Sinfo is
return Flag14 (N); return Flag14 (N);
end Has_Pragma_CPU; end Has_Pragma_CPU;
function Has_Pragma_Dispatching_Domain
(N : Node_Id) return Boolean is
begin
pragma Assert (False
or else NT (N).Nkind = N_Task_Definition);
return Flag15 (N);
end Has_Pragma_Dispatching_Domain;
function Has_Pragma_Priority function Has_Pragma_Priority
(N : Node_Id) return Boolean is (N : Node_Id) return Boolean is
begin begin
...@@ -4513,6 +4521,14 @@ package body Sinfo is ...@@ -4513,6 +4521,14 @@ package body Sinfo is
Set_Flag14 (N, Val); Set_Flag14 (N, Val);
end Set_Has_Pragma_CPU; end Set_Has_Pragma_CPU;
procedure Set_Has_Pragma_Dispatching_Domain
(N : Node_Id; Val : Boolean := True) is
begin
pragma Assert (False
or else NT (N).Nkind = N_Task_Definition);
Set_Flag15 (N, Val);
end Set_Has_Pragma_Dispatching_Domain;
procedure Set_Has_Pragma_Priority procedure Set_Has_Pragma_Priority
(N : Node_Id; Val : Boolean := True) is (N : Node_Id; Val : Boolean := True) is
begin begin
......
...@@ -1145,6 +1145,11 @@ package Sinfo is ...@@ -1145,6 +1145,11 @@ package Sinfo is
-- flag the presence of a CPU pragma in the declaration sequence (public -- flag the presence of a CPU pragma in the declaration sequence (public
-- or private in the task case). -- or private in the task case).
-- Has_Pragma_Dispatching_Domain (Flag15-Sem)
-- A flag present in N_Task_Definition nodes to flag the presence of a
-- Dispatching_Domain pragma in the declaration sequence (public or
-- private in the task case).
-- Has_Pragma_Suppress_All (Flag14-Sem) -- Has_Pragma_Suppress_All (Flag14-Sem)
-- This flag is set in an N_Compilation_Unit node if the Suppress_All -- This flag is set in an N_Compilation_Unit node if the Suppress_All
-- pragma appears anywhere in the unit. This accommodates the rather -- pragma appears anywhere in the unit. This accommodates the rather
...@@ -5061,6 +5066,7 @@ package Sinfo is ...@@ -5061,6 +5066,7 @@ package Sinfo is
-- Has_Task_Name_Pragma (Flag8-Sem) -- Has_Task_Name_Pragma (Flag8-Sem)
-- Has_Relative_Deadline_Pragma (Flag9-Sem) -- Has_Relative_Deadline_Pragma (Flag9-Sem)
-- Has_Pragma_CPU (Flag14-Sem) -- Has_Pragma_CPU (Flag14-Sem)
-- Has_Pragma_Dispatching_Domain (Flag15-Sem)
-------------------- --------------------
-- 9.1 Task Item -- -- 9.1 Task Item --
...@@ -8493,6 +8499,9 @@ package Sinfo is ...@@ -8493,6 +8499,9 @@ package Sinfo is
function Has_Pragma_CPU function Has_Pragma_CPU
(N : Node_Id) return Boolean; -- Flag14 (N : Node_Id) return Boolean; -- Flag14
function Has_Pragma_Dispatching_Domain
(N : Node_Id) return Boolean; -- Flag15
function Has_Pragma_Priority function Has_Pragma_Priority
(N : Node_Id) return Boolean; -- Flag6 (N : Node_Id) return Boolean; -- Flag6
...@@ -9462,6 +9471,9 @@ package Sinfo is ...@@ -9462,6 +9471,9 @@ package Sinfo is
procedure Set_Has_Pragma_CPU procedure Set_Has_Pragma_CPU
(N : Node_Id; Val : Boolean := True); -- Flag14 (N : Node_Id; Val : Boolean := True); -- Flag14
procedure Set_Has_Pragma_Dispatching_Domain
(N : Node_Id; Val : Boolean := True); -- Flag15
procedure Set_Has_Pragma_Priority procedure Set_Has_Pragma_Priority
(N : Node_Id; Val : Boolean := True); -- Flag6 (N : Node_Id; Val : Boolean := True); -- Flag6
...@@ -11875,6 +11887,7 @@ package Sinfo is ...@@ -11875,6 +11887,7 @@ package Sinfo is
pragma Inline (Has_Self_Reference); pragma Inline (Has_Self_Reference);
pragma Inline (Has_No_Elaboration_Code); pragma Inline (Has_No_Elaboration_Code);
pragma Inline (Has_Pragma_CPU); pragma Inline (Has_Pragma_CPU);
pragma Inline (Has_Pragma_Dispatching_Domain);
pragma Inline (Has_Pragma_Priority); pragma Inline (Has_Pragma_Priority);
pragma Inline (Has_Pragma_Suppress_All); pragma Inline (Has_Pragma_Suppress_All);
pragma Inline (Has_Private_View); pragma Inline (Has_Private_View);
...@@ -12194,6 +12207,7 @@ package Sinfo is ...@@ -12194,6 +12207,7 @@ package Sinfo is
pragma Inline (Set_Has_Dynamic_Range_Check); pragma Inline (Set_Has_Dynamic_Range_Check);
pragma Inline (Set_Has_No_Elaboration_Code); pragma Inline (Set_Has_No_Elaboration_Code);
pragma Inline (Set_Has_Pragma_CPU); pragma Inline (Set_Has_Pragma_CPU);
pragma Inline (Set_Has_Pragma_Dispatching_Domain);
pragma Inline (Set_Has_Pragma_Priority); pragma Inline (Set_Has_Pragma_Priority);
pragma Inline (Set_Has_Pragma_Suppress_All); pragma Inline (Set_Has_Pragma_Suppress_All);
pragma Inline (Set_Has_Private_View); pragma Inline (Set_Has_Private_View);
......
...@@ -156,6 +156,7 @@ package Snames is ...@@ -156,6 +156,7 @@ package Snames is
Name_uChain : constant Name_Id := N + $; Name_uChain : constant Name_Id := N + $;
Name_uController : constant Name_Id := N + $; Name_uController : constant Name_Id := N + $;
Name_uCPU : constant Name_Id := N + $; Name_uCPU : constant Name_Id := N + $;
Name_uDispatching_Domain : constant Name_Id := N + $;
Name_uEntry_Bodies : constant Name_Id := N + $; Name_uEntry_Bodies : constant Name_Id := N + $;
Name_uExpunge : constant Name_Id := N + $; Name_uExpunge : constant Name_Id := N + $;
Name_uFinalizer : constant Name_Id := N + $; Name_uFinalizer : constant Name_Id := N + $;
...@@ -360,6 +361,7 @@ package Snames is ...@@ -360,6 +361,7 @@ package Snames is
Name_Detect_Blocking : constant Name_Id := N + $; -- Ada 05 Name_Detect_Blocking : constant Name_Id := N + $; -- Ada 05
Name_Default_Storage_Pool : constant Name_Id := N + $; -- Ada 12 Name_Default_Storage_Pool : constant Name_Id := N + $; -- Ada 12
Name_Discard_Names : constant Name_Id := N + $; Name_Discard_Names : constant Name_Id := N + $;
Name_Dispatching_Domain : constant Name_Id := N + $; -- Ada 12
Name_Elaboration_Checks : constant Name_Id := N + $; -- GNAT Name_Elaboration_Checks : constant Name_Id := N + $; -- GNAT
Name_Eliminate : constant Name_Id := N + $; -- GNAT Name_Eliminate : constant Name_Id := N + $; -- GNAT
Name_Extend_System : constant Name_Id := N + $; -- GNAT Name_Extend_System : constant Name_Id := N + $; -- GNAT
...@@ -1523,6 +1525,7 @@ package Snames is ...@@ -1523,6 +1525,7 @@ package Snames is
Pragma_Detect_Blocking, Pragma_Detect_Blocking,
Pragma_Default_Storage_Pool, Pragma_Default_Storage_Pool,
Pragma_Discard_Names, Pragma_Discard_Names,
Pragma_Dispatching_Domain,
Pragma_Elaboration_Checks, Pragma_Elaboration_Checks,
Pragma_Eliminate, Pragma_Eliminate,
Pragma_Extend_System, Pragma_Extend_System,
......
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