Commit 5b2217f8 by Robert Dewar Committed by Arnaud Charlet

restrict.ads: Add missing restrictions, and properly label all GNAT defined ones

2008-05-28  Robert Dewar  <dewar@adacore.com>

	* restrict.ads:
	Add missing restrictions, and properly label all GNAT defined ones
	
	* rtsfind.ads:
	Add entry for Ada_Real_Time.Timing_Events.Timing_Event
	Add entry for Ada.Task_Termination.Set_Specific_Handler
	Add entry for Ada.Task_Termination.Specific_Handler
	
	* s-rident.ads:
	Add missing restrictions and properly mark all gnat defined ones
	
	* sem_ch3.adb:
	(Analyze_Object_Declaration): Check No_Local_Timing_Events restriction
	
	* sem_res.adb:
	(Resolve_Call): Check violation of No_Specific_Termination_Handlers

	* gnat_rm.texi: Add missing restrictions, and properly label all
	GNAT defined ones

From-SVN: r136087
parent 0b795892
...@@ -3897,7 +3897,7 @@ the Profile (Ravenscar), the value of Max_Task_Entries is always ...@@ -3897,7 +3897,7 @@ the Profile (Ravenscar), the value of Max_Task_Entries is always
no calls to Task_Identification.Abort_Task. no calls to Task_Identification.Abort_Task.
@item No_Asynchronous_Control @item No_Asynchronous_Control
[RM D.7] There are no semantic dependences on the package There are no semantic dependences on the package
Asynchronous_Task_Control. Asynchronous_Task_Control.
@item No_Calendar @item No_Calendar
...@@ -3918,6 +3918,10 @@ Detach_Handler, and Reference). ...@@ -3918,6 +3918,10 @@ Detach_Handler, and Reference).
Protected objects and access types that designate Protected objects and access types that designate
such objects shall be declared only at library level. such objects shall be declared only at library level.
@item No_Local_Timing_Events
[RM D.7] All objects of type Ada.Timing_Events.Timing_Event are
declared at the library level.
@item No_Protected_Type_Allocators @item No_Protected_Type_Allocators
There are no allocators for protected types or There are no allocators for protected types or
types containing protected subcomponents. types containing protected subcomponents.
...@@ -3931,6 +3935,10 @@ Requeue statements are not allowed. ...@@ -3931,6 +3935,10 @@ Requeue statements are not allowed.
@item No_Select_Statements @item No_Select_Statements
There are no select_statements. There are no select_statements.
@item No_Specific_Termination_Handlers
[RM D.7] There are no calls to Ada.Task_Termination.Set_Specific_Handler
or to Ada.Task_Termination.Specific_Handler.
@item No_Task_Allocators @item No_Task_Allocators
[RM D.7] There are no allocators for task types [RM D.7] There are no allocators for task types
or types containing task subcomponents. or types containing task subcomponents.
...@@ -3945,6 +3953,12 @@ directly on the environment task of the partition. ...@@ -3945,6 +3953,12 @@ directly on the environment task of the partition.
@item No_Task_Termination @item No_Task_Termination
Tasks which terminate are erroneous. Tasks which terminate are erroneous.
@item No_Unchecked_Conversion
There are no semantic dependencies on the Ada.Unchecked_Conversion package.
@item No_Unchecked_Deallocation
There are no semantic dependencies on the Ada.Unchecked_Deallocation package.
@item Simple_Barriers @item Simple_Barriers
Entry barrier condition expressions shall be either static Entry barrier condition expressions shall be either static
boolean expressions or boolean objects which are declared in boolean expressions or boolean objects which are declared in
......
...@@ -105,14 +105,18 @@ package Restrict is ...@@ -105,14 +105,18 @@ package Restrict is
Implementation_Restriction : array (All_Restrictions) of Boolean := Implementation_Restriction : array (All_Restrictions) of Boolean :=
(Simple_Barriers => True, (Simple_Barriers => True,
No_Asynchronous_Control => True,
No_Calendar => True, No_Calendar => True,
No_Dispatching_Calls => True, No_Dispatching_Calls => True,
No_Dynamic_Attachment => True, No_Dynamic_Attachment => True,
No_Elaboration_Code => True,
No_Enumeration_Maps => True, No_Enumeration_Maps => True,
No_Entry_Calls_In_Elaboration_Code => True, No_Entry_Calls_In_Elaboration_Code => True,
No_Entry_Queue => True, No_Entry_Queue => True,
No_Exception_Handlers => True, No_Exception_Handlers => True,
No_Exception_Registration => True, No_Exception_Registration => True,
No_Implementation_Attributes => True,
No_Implementation_Pragmas => True,
No_Implicit_Conditionals => True, No_Implicit_Conditionals => True,
No_Implicit_Dynamic_Code => True, No_Implicit_Dynamic_Code => True,
No_Implicit_Loops => True, No_Implicit_Loops => True,
...@@ -126,12 +130,11 @@ package Restrict is ...@@ -126,12 +130,11 @@ package Restrict is
No_Streams => True, No_Streams => True,
No_Task_Attributes_Package => True, No_Task_Attributes_Package => True,
No_Task_Termination => True, No_Task_Termination => True,
No_Unchecked_Conversion => True,
No_Unchecked_Deallocation => True,
No_Wide_Characters => True, No_Wide_Characters => True,
Static_Priorities => True, Static_Priorities => True,
Static_Storage_Size => True, Static_Storage_Size => True,
No_Implementation_Attributes => True,
No_Implementation_Pragmas => True,
No_Elaboration_Code => True,
others => False); others => False);
-- The following table records entries made by Restrictions pragmas -- The following table records entries made by Restrictions pragmas
......
...@@ -144,6 +144,7 @@ package Rtsfind is ...@@ -144,6 +144,7 @@ package Rtsfind is
-- Children of Ada.Real_Time -- Children of Ada.Real_Time
Ada_Real_Time_Delays, Ada_Real_Time_Delays,
Ada_Real_Time_Timing_Events,
-- Children of Ada.Streams -- Children of Ada.Streams
...@@ -394,7 +395,7 @@ package Rtsfind is ...@@ -394,7 +395,7 @@ package Rtsfind is
-- Range of values for children of Ada.Interrupts -- Range of values for children of Ada.Interrupts
subtype Ada_Real_Time_Child is Ada_Child subtype Ada_Real_Time_Child is Ada_Child
range Ada_Real_Time_Delays .. Ada_Real_Time_Delays; range Ada_Real_Time_Delays .. Ada_Real_Time_Timing_Events;
-- Range of values for children of Ada.Real_Time -- Range of values for children of Ada.Real_Time
subtype Ada_Streams_Child is Ada_Child subtype Ada_Streams_Child is Ada_Child
...@@ -470,6 +471,12 @@ package Rtsfind is ...@@ -470,6 +471,12 @@ package Rtsfind is
RE_Null, RE_Null,
RO_CA_Time, -- Ada.Calendar
RO_CA_Delay_For, -- Ada.Calendar.Delays
RO_CA_Delay_Until, -- Ada.Calendar.Delays
RO_CA_To_Duration, -- Ada.Calendar.Delays
RE_Set_Deadline, -- Ada.Dispatching.EDF RE_Set_Deadline, -- Ada.Dispatching.EDF
RE_Code_Loc, -- Ada.Exceptions RE_Code_Loc, -- Ada.Exceptions
...@@ -503,6 +510,16 @@ package Rtsfind is ...@@ -503,6 +510,16 @@ package Rtsfind is
RE_Names, -- Ada.Interrupts.Names RE_Names, -- Ada.Interrupts.Names
RE_Clock, -- Ada.Real_Time
RE_Time_Span, -- Ada.Real_Time
RE_Time_Span_Zero, -- Ada.Real_Time
RO_RT_Time, -- Ada.Real_Time
RO_RT_Delay_Until, -- Ada.Real_Time.Delays
RO_RT_To_Duration, -- Ada.Real_Time.Delays
RE_Timing_Event, -- Ada_Real_Time_Timing_Events
RE_Root_Stream_Type, -- Ada.Streams RE_Root_Stream_Type, -- Ada.Streams
RE_Stream_Element, -- Ada.Streams RE_Stream_Element, -- Ada.Streams
...@@ -590,24 +607,13 @@ package Rtsfind is ...@@ -590,24 +607,13 @@ package Rtsfind is
RE_TK_Tagged, -- Ada.Tags RE_TK_Tagged, -- Ada.Tags
RE_TK_Task, -- Ada.Tags RE_TK_Task, -- Ada.Tags
RE_Set_Specific_Handler, -- Ada.Task_Termination
RE_Specific_Handler, -- Ada.Task_Termination
RE_Abort_Task, -- Ada.Task_Identification RE_Abort_Task, -- Ada.Task_Identification
RE_Current_Task, -- Ada.Task_Identification RE_Current_Task, -- Ada.Task_Identification
RO_AT_Task_Id, -- Ada.Task_Identification RO_AT_Task_Id, -- Ada.Task_Identification
RO_CA_Time, -- Ada.Calendar
RO_CA_Delay_For, -- Ada.Calendar.Delays
RO_CA_Delay_Until, -- Ada.Calendar.Delays
RO_CA_To_Duration, -- Ada.Calendar.Delays
RE_Clock, -- Ada.Real_Time
RE_Time_Span, -- Ada.Real_Time
RE_Time_Span_Zero, -- Ada.Real_Time
RO_RT_Time, -- Ada.Real_Time
RO_RT_Delay_Until, -- Ada.Real_Time.Delays
RO_RT_To_Duration, -- Ada.Real_Time.Delays
RE_Integer_64, -- Interfaces RE_Integer_64, -- Interfaces
RE_Unsigned_8, -- Interfaces RE_Unsigned_8, -- Interfaces
RE_Unsigned_16, -- Interfaces RE_Unsigned_16, -- Interfaces
...@@ -1599,14 +1605,20 @@ package Rtsfind is ...@@ -1599,14 +1605,20 @@ package Rtsfind is
RO_TS_Set_Entry_Name, -- System.Tasking.Stages RO_TS_Set_Entry_Name, -- System.Tasking.Stages
RE_Terminated); -- System.Tasking.Stages RE_Terminated); -- System.Tasking.Stages
-- The following declarations build a table that is indexed by the -- The following declarations build a table that is indexed by the RTE
-- RTE function to determine the unit containing the given entity. -- function to determine the unit containing the given entity. This table
-- This table is sorted in order of package names. -- is sorted in order of package names.
RE_Unit_Table : array (RE_Id) of RTU_Id := ( RE_Unit_Table : array (RE_Id) of RTU_Id := (
RE_Null => RTU_Null, RE_Null => RTU_Null,
RO_CA_Time => Ada_Calendar,
RO_CA_Delay_For => Ada_Calendar_Delays,
RO_CA_Delay_Until => Ada_Calendar_Delays,
RO_CA_To_Duration => Ada_Calendar_Delays,
RE_Set_Deadline => Ada_Dispatching_EDF, RE_Set_Deadline => Ada_Dispatching_EDF,
RE_Code_Loc => Ada_Exceptions, RE_Code_Loc => Ada_Exceptions,
...@@ -1640,6 +1652,16 @@ package Rtsfind is ...@@ -1640,6 +1652,16 @@ package Rtsfind is
RE_Names => Ada_Interrupts_Names, RE_Names => Ada_Interrupts_Names,
RE_Clock => Ada_Real_Time,
RE_Time_Span => Ada_Real_Time,
RE_Time_Span_Zero => Ada_Real_Time,
RO_RT_Time => Ada_Real_Time,
RO_RT_Delay_Until => Ada_Real_Time_Delays,
RO_RT_To_Duration => Ada_Real_Time_Delays,
RE_Timing_Event => Ada_Real_Time_Timing_Events,
RE_Root_Stream_Type => Ada_Streams, RE_Root_Stream_Type => Ada_Streams,
RE_Stream_Element => Ada_Streams, RE_Stream_Element => Ada_Streams,
...@@ -1727,22 +1749,13 @@ package Rtsfind is ...@@ -1727,22 +1749,13 @@ package Rtsfind is
RE_TK_Tagged => Ada_Tags, RE_TK_Tagged => Ada_Tags,
RE_TK_Task => Ada_Tags, RE_TK_Task => Ada_Tags,
RE_Set_Specific_Handler => Ada_Task_Termination,
RE_Specific_Handler => Ada_Task_Termination,
RE_Abort_Task => Ada_Task_Identification, RE_Abort_Task => Ada_Task_Identification,
RE_Current_Task => Ada_Task_Identification, RE_Current_Task => Ada_Task_Identification,
RO_AT_Task_Id => Ada_Task_Identification, RO_AT_Task_Id => Ada_Task_Identification,
RO_CA_Time => Ada_Calendar,
RO_CA_Delay_For => Ada_Calendar_Delays,
RO_CA_Delay_Until => Ada_Calendar_Delays,
RO_CA_To_Duration => Ada_Calendar_Delays,
RE_Clock => Ada_Real_Time,
RE_Time_Span => Ada_Real_Time,
RE_Time_Span_Zero => Ada_Real_Time,
RO_RT_Time => Ada_Real_Time,
RO_RT_Delay_Until => Ada_Real_Time_Delays,
RO_RT_To_Duration => Ada_Real_Time_Delays,
RE_Integer_64 => Interfaces, RE_Integer_64 => Interfaces,
RE_Unsigned_8 => Interfaces, RE_Unsigned_8 => Interfaces,
RE_Unsigned_16 => Interfaces, RE_Unsigned_16 => Interfaces,
......
...@@ -89,6 +89,7 @@ package System.Rident is ...@@ -89,6 +89,7 @@ package System.Rident is
No_Implicit_Loops, -- GNAT No_Implicit_Loops, -- GNAT
No_Initialize_Scalars, -- GNAT No_Initialize_Scalars, -- GNAT
No_Local_Allocators, -- (RM H.4(8)) No_Local_Allocators, -- (RM H.4(8))
No_Local_Timing_Events, -- (RM D.7(10.2/2))
No_Local_Protected_Objects, -- GNAT No_Local_Protected_Objects, -- GNAT
No_Nested_Finalization, -- (RM D.7(4)) No_Nested_Finalization, -- (RM D.7(4))
No_Protected_Type_Allocators, -- GNAT No_Protected_Type_Allocators, -- GNAT
...@@ -99,6 +100,7 @@ package System.Rident is ...@@ -99,6 +100,7 @@ package System.Rident is
No_Requeue_Statements, -- GNAT No_Requeue_Statements, -- GNAT
No_Secondary_Stack, -- GNAT No_Secondary_Stack, -- GNAT
No_Select_Statements, -- GNAT (Ravenscar) No_Select_Statements, -- GNAT (Ravenscar)
No_Specific_Termination_Handlers, -- (RM D.7(10.7/2))
No_Standard_Storage_Pools, -- GNAT No_Standard_Storage_Pools, -- GNAT
No_Streams, -- GNAT No_Streams, -- GNAT
No_Task_Allocators, -- (RM D.7(7)) No_Task_Allocators, -- (RM D.7(7))
......
...@@ -3064,6 +3064,14 @@ package body Sem_Ch3 is ...@@ -3064,6 +3064,14 @@ package body Sem_Ch3 is
then then
Set_In_Private_Part (Id); Set_In_Private_Part (Id);
end if; end if;
-- Check for violation of No_Local_Timing_Events
if Is_RTE (Etype (Id), RE_Timing_Event)
and then not Is_Library_Level_Entity (Id)
then
Check_Restriction (No_Local_Timing_Events, N);
end if;
end Analyze_Object_Declaration; end Analyze_Object_Declaration;
--------------------------- ---------------------------
......
...@@ -5146,6 +5146,15 @@ package body Sem_Res is ...@@ -5146,6 +5146,15 @@ package body Sem_Res is
Check_Intrinsic_Call (N); Check_Intrinsic_Call (N);
end if; end if;
-- Check for violation of restriction No_Specific_Termination_Handlers
if Is_RTE (Nam, RE_Set_Specific_Handler)
or else
Is_RTE (Nam, RE_Specific_Handler)
then
Check_Restriction (No_Specific_Termination_Handlers, N);
end if;
-- All done, evaluate call and deal with elaboration issues -- All done, evaluate call and deal with elaboration issues
Eval_Call (N); Eval_Call (N);
......
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