6.5.1 Nonreturning Subprograms
Specifying aspect No_Return to have the value True
indicates that a subprogram cannot return normally; it may, for example,
propagate an exception or loop forever.
Static Semantics
For a subprogram or
generic subprogram, 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. When not directly specified, if the subprogram
is a primitive subprogram inherited by a derived type, then the aspect
is True if any corresponding subprogram of the parent or progenitor types
is nonreturning. Otherwise, the aspect is False.
If a generic subprogram is nonreturning, then so
are its instances. If a subprogram declared within a generic unit is
nonreturning, then so are the corresponding copies of that subprogram
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 subprogram shall be nonreturning if it overrides
a dispatching nonreturning subprogram.
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 subprogram
declaration, then the renamed subprogram 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
Example of a specification
of a No_Return aspect:
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