Spec-Zone.ru › Ada 2022
Ada Reference Manual (Ada 2022)

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:
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.
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.

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


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API