Справочник по Ada 2012
6.5.1 Невозвращающие процедуры
Указание аспектa No_Return со значением True означает, что процедура не может вернуть управление нормально; она может распространить исключение или зациклиться.
Абзацы 2 и 3 перемещены в Приложение J, «Устаревшие возможности».
Статическая семантика
Для процедуры или обобщенной процедуры может быть задан следующий аспект представления языка:
No_Return
Тип аспекта No_Return — Boolean. Когда аспект No_Return имеет значение True для сущности, сущность называется невозвращающейся.
Если он задан непосредственно, определение_аспекта должно быть статическим выражением. Этот аспект никогда не наследуется; если он не задан непосредственно, аспект имеет значение False.
Если обобщенная процедура невозвращающаяся, то и ее экземпляры также невозвращающиеся. Если процедура, объявленная внутри обобщенного блока, невозвращающаяся, то соответствующие копии этой процедуры в экземплярах также будут невозвращающимися.
Правила легальности
Аспект No_Return не должен быть задан для пустой процедуры или экземпляра обобщенного блока.
Оператор возврата не должен применяться к невозвращающейся процедуре или обобщенной процедуре.
Процедура должна быть невозвращающейся, если она переопределяет диспетчеризованную невозвращающуюся процедуру. В дополнение к местам, где обычно применяются правила легальности (см. 12.3), это правило также применяется в закрытой части экземпляра обобщенного блока.
Если переименование-как-тело завершает объявление невозвращающейся процедуры, то переименованная процедура должна быть невозвращающейся.
Абзац 8 был удален.
Динамическая семантика
Если тело невозвращающейся процедуры завершается нормально, то в точке вызова генерируется исключение Program_Error.
Примеры
procedure Fail(Msg : String) -- вызывает исключение Fatal_Error
with No_Return;
-- Уведомляет компилятор и читателя, что процедура никогда не возвращается нормально
with No_Return;
-- Уведомляет компилятор и читателя, что процедура никогда не возвращается нормально