aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_elab.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/sem_elab.ads')
-rw-r--r--gcc/ada/sem_elab.ads65
1 files changed, 65 insertions, 0 deletions
diff --git a/gcc/ada/sem_elab.ads b/gcc/ada/sem_elab.ads
index bfb174d..21518be 100644
--- a/gcc/ada/sem_elab.ads
+++ b/gcc/ada/sem_elab.ads
@@ -125,4 +125,69 @@ package Sem_Elab is
-- ABE diagnostics or runtime checks. If this is the case, store N into
-- a table for later processing.
+ ---------------------------------------------------------------------------
+ -- --
+ -- L E G A C Y A C C E S S B E F O R E E L A B O R A T I O N --
+ -- --
+ -- M E C H A N I S M --
+ -- --
+ ---------------------------------------------------------------------------
+
+ -- This section contains the implementation of the pre-18.x Legacy ABE
+ -- Mechanism. The mechanism can be activated using switch -gnatH (legacy
+ -- elaboration checking mode enabled).
+
+ procedure Check_Elab_Assign (N : Node_Id);
+ -- N is either the left side of an assignment, or a procedure argument for
+ -- a mode OUT or IN OUT formal. This procedure checks for a possible case
+ -- of access to an entity from elaboration code before the entity has been
+ -- initialized, and issues appropriate warnings.
+
+ procedure Check_Elab_Call
+ (N : Node_Id;
+ Outer_Scope : Entity_Id := Empty;
+ In_Init_Proc : Boolean := False);
+ -- Check a call for possible elaboration problems. The node N is either an
+ -- N_Function_Call or N_Procedure_Call_Statement node or an access
+ -- attribute reference whose prefix is a subprogram.
+ --
+ -- If SPARK_Mode is On, then N can also be a variable reference, since
+ -- SPARK requires the use of Elaborate_All for references to variables
+ -- in other packages.
+
+ -- The Outer_Scope argument indicates whether this is an outer level
+ -- call from Sem_Res (Outer_Scope set to Empty), or an internal recursive
+ -- call (Outer_Scope set to entity of outermost call, see body). The flag
+ -- In_Init_Proc should be set whenever the current context is a type
+ -- init proc.
+
+ -- Note: this might better be called Check_Elab_Reference (to recognize
+ -- the SPARK case), but we prefer to keep the original name, since this
+ -- is primarily used for checking for calls that could generate an ABE).
+
+ procedure Check_Elab_Calls;
+ -- Not all the processing for Check_Elab_Call can be done at the time
+ -- of calls to Check_Elab_Call. This is because for internal calls, we
+ -- need to wait to complete the check until all generic bodies have been
+ -- instantiated. The Check_Elab_Calls procedure cleans up these waiting
+ -- checks. It is called once after the completion of instantiation.
+
+ procedure Check_Elab_Instantiation
+ (N : Node_Id;
+ Outer_Scope : Entity_Id := Empty);
+ -- Check an instantiation for possible elaboration problems. N is an
+ -- instantiation node (N_Package_Instantiation, N_Function_Instantiation,
+ -- or N_Procedure_Instantiation), and Outer_Scope indicates if this is
+ -- an outer level call from Sem_Ch12 (Outer_Scope set to Empty), or an
+ -- internal recursive call (Outer_Scope set to scope of outermost call,
+ -- see body for further details). The returned value is relevant only
+ -- for an outer level call, and is set to False if an elaboration error
+ -- is bound to occur on the instantiation, and True otherwise. This is
+ -- used by the caller to signal that the body of the instance should
+ -- not be generated (see detailed description in body).
+
+ procedure Check_Task_Activation (N : Node_Id);
+ -- At the point at which tasks are activated in a package body, check
+ -- that the bodies of the tasks are elaborated.
+
end Sem_Elab;