Ada Reference Manual (Ada 2022) — Legal Information

# 6.5.1 Nonreturning Subprograms

1/5
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.
Paragraphs 2 and 3 were moved to Annex J, “Obsolescent Features”.

#### Static Semantics

3.1/5
For a subprogram or generic subprogram, the following language-defined representation aspect may be specified:
3.2/3
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.
3.3/5
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.
3.4/5
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

4/3
Aspect No_Return shall not be specified for a null procedure nor an instance of a generic unit.
5/2
A return statement shall not apply to a nonreturning procedure or generic procedure.
5.1/5
Any return statement that applies to a nonreturning function or generic function shall be a simple_return_statement with an expression that is a raise_expression, a call on a nonreturning function, or a parenthesized expression of one of these.
6/5
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.
7/5
If a renaming-as-body completes a nonreturning subprogram declaration, then the renamed subprogram shall be nonreturning.
Paragraph 8 was deleted.

#### Dynamic Semantics

9/2
If the body of a nonreturning procedure completes normally, Program_Error is raised at the point of the call.

#### Examples

10/5
Example of a specification of a No_Return aspect:
11/3
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