Ada Conformity Assessment Authority      Home Conformity Assessment   Test Suite ARGAda Standard
Ada Reference Manual (Ada 2022)Legal Information
Contents   Index   References   Search   Previous   Next 

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

Static Semantics

 For a subprogram or generic subprogram, the following language-defined representation aspect may be specified: 
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.
 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.
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.


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

Contents   Index   References   Search   Previous   Next 
Ada-Europe Ada 2005 and 2012 Editions sponsored in part by Ada-Europe