COBOL (мэйнфрейм IBM)
ID DIVISION.
PROGRAM-ID. USELESS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 W-WHEN-COMPILED PIC X(8)BX(8) VALUE SPACE.
PROCEDURE DIVISION.
IF W-WHEN-COMPILED EQUAL TO SPACE
NEXT SENTENCE
END-IF
MOVE SPACE TO W-WHEN-COMPILED.
MOVE WHEN-COMPILED TO W-WHEN-COMPILED
DISPLAY W-WHEN-COMPILED " HELLO WORLD!"
GOBACK
.
Если вы запустите вышеупомянутую программу (любой COBOL IBM Mainframe начиная с COBOL II (первый компилятор IBM по стандарту 1985 года, возможно, также другие IBM COBOL), то вы получите:
22.02.14 13.11.02 HELLO WORLD!
Однако, если вы удалите бесполезную строку «ПЕРЕМЕСТИТЬ ПРОСТРАНСТВО В W-КОГДА-СОБИРАЕТСЯ». (поле имеет начальное значение пробела и содержит другое содержимое, помещенное в него в следующей инструкции, и оно в любом случае разветвляется) программа не выдает никаких данных и фактически завершает работу (U4038) (что означает, что происходит сбой) со следующим сообщением :
IGZ0037S The flow of control in program USELESS proceeded beyond the
last line of the program. From compile unit USELESS at entry
point USELESS at compile unit offset +000003AC at entry offset
+000003AC at address 119003AC.
(код сообщения и текст могут отличаться у разных компиляторов, смещения зависят от фактического используемого компилятора и параметров компиляции, адрес зависит от того, куда загружается программа при выполнении EXECuted).
Причина в том NEXT SENTENCE
. Это Secret GO TO
. Компилятор выслеживает следующий полный останов / период в источнике и генерирует ветвь для следующей инструкции. Начиная с COBOL II, использование полных остановок / периодов было смягчено. Программа должна заканчиваться полным остановом / периодом. В этом случае ветка находится вне конца программы.
Обе программы компилируются на 100% чисто (без диагностических сообщений, код возврата ноль).
Такое поведение является глупым «расширением IBM» для COBOL. 1985 Стандарт не допускает NEXT SENTENCE
в IF
/ END-IF
( CONTINUE
используется вместо этого, который является не-ор). IBM позволила это - время от времени вызывая ужасные ошибки.