Справочник Ada 2012
5.8 Операторы goto
Оператор goto_statement задаёт явное передачу управления от данного оператора statement к целевому оператору с заданным меткой.
Синтаксис
Правила разрешения имён
Имя label_name должно быть разрешено как метка; оператор statement с этой меткой является целевым оператором.
Правила легальности
Вложенная последовательность sequence_of_statements, содержащая целевой оператор, должна также содержать оператор goto_statement. Кроме того, если оператор goto_statement находится внутри оператора accept_statement или тела, то целевой оператор не должен находиться вне этого вложенного блока.
Динамическая семантика
Выполнение оператора goto_statement передаёт управление целевому оператору, завершая выполнение любого составного оператора compound_statement, который содержит оператор goto_statement, но не содержит целевой оператор.
ПРИМЕЧАНИЯ
9 Приведённые правила позволяют передавать управление к оператору statement вложенной последовательности sequence_of_statements, но не наоборот. Аналогично, они запрещают передачу управления, например, между альтернативами оператора case_statement, if_statement или select_statement; между обработчиками исключений exception_handler; или из обработчика исключений exception_handler в последовательность операторов handled_sequence_of_statements обратно к последовательности sequence_of_statements.
Примеры
Пример цикла, содержащего оператор goto:
<<Sort>>
for I in 1 .. N-1 loop
if A(I) > A(I+1) then
Exchange(A(I), A(I+1));
goto Sort;
end if;
end loop;
for I in 1 .. N-1 loop
if A(I) > A(I+1) then
Exchange(A(I), A(I+1));
goto Sort;
end if;
end loop;