6.5.1 Nonreturning Procedures
Specifying aspect No_Return to have the value True
indicates that a procedure cannot return normally; it may propagate an
exception or loop forever.
Static Semantics
For a procedure or
generic procedure, the following language-defined representation aspect
may be specified:
No_Return
The type of aspect No_Return is Boolean. When aspect No_Return is True
for an entity, the entity is said to be
nonreturning.
If directly specified, the
aspect_definition
shall be a static expression. This aspect is never inherited; if not
directly specified, the aspect is False.
If a generic procedure is nonreturning, then so
are its instances. If a procedure declared within a generic unit is nonreturning,
then so are the corresponding copies of that procedure in instances.
Legality Rules
Aspect No_Return shall not be specified for a null
procedure nor an instance of a generic unit.
A return statement shall not apply to a nonreturning
procedure or generic procedure.
A procedure shall be nonreturning if it overrides
a dispatching nonreturning procedure.
In addition
to the places where Legality Rules normally apply (see
12.3),
this rule applies also in the private part of an instance of a generic
unit.
If a renaming-as-body completes a nonreturning procedure
declaration, then the renamed procedure shall be nonreturning.
Paragraph 8 was deleted.
Dynamic Semantics
If the body of a nonreturning procedure completes
normally, Program_Error is raised at the point of the call.
Examples
procedure Fail(Msg : String) -- raises Fatal_Error exception
with No_Return;
-- Inform compiler and reader that procedure never returns normally
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe