flang компилятор доказывает, что программа не зациклится 0.6.2 GitHub

Порча попадает туда, где считают, только если корпус сверки доходит до каталога с единственным случаем

Порча (правка эталона, которой сверка обязана покраснеть) может примениться к исходнику — то есть «найти своё место» — и всё равно не проверить ничего, потому что корпус, по которому идёт сверка, до испорченной строки не доходит. Отличить это от исправной порчи по виду нельзя: и там и там прогон зелёный, и там и там подмена применилась.

Чем подтверждено. flang/self/conc.flang, сверка словаря действий. Порча: из списка действий, у которых есть адресат, убрано седьмое — «поручить». Корпус сверки перечислял четыре каталога: flang/conc/examples, examples, flang/stdlib, flang/core. Прогон 18 августа, ветка work/planirovshchik:

корпусимён вариантовиз них действийизъятие «поручить выпало»
четыре каталога1983зелёное — не поймано
плюс flang/conc/services1984красное

Единственная программа дерева, где вообще встречается поручить, — это flang/conc/services/file-read.flang, и лежит она в пятом каталоге. Пока корпус туда не заглядывал, вся ветка седьмого действия у обеих сторон стояла непроверенной, а сверка при этом печатала «расхождений 0» и «программ 174».

Тем же изъятием найдена и настоящая ошибка, которую эта дыра прятала: на стволе «Поле процесса у действия» отвечало на "поручить" пустой строкой, а свидетель — "кому".

Чему учит. У порчи есть два разных вопроса, и зелёный прогон отвечает только на первый:

  1. применилась ли подмена (ловится сравнением текста до и после — это уже делается);
  2. лежит ли испорченная строка на пути хотя бы одного значения корпуса.

Второе проверяется не рассуждением, а снятием: убрать каталог (или программу) из корпуса и посмотреть, что изъятие стало зелёным. Если после снятия ничего не изменилось — корпус до этого места не доходил и раньше.

Дешёвый признак того же: печатать не только «расхождений 0», но и ОХВАТ — сколько имён/случаев корпус вообще предъявил. Строка «из них действий 3» при семи действиях языка видна глазом, а «расхождений 0» — нет.

Чем ограничено. Признак не полный: корпус может доходить до строки и всё равно не различать её значений (например, сравнивать поле, которое у всех программ пустое). Тогда изъятие тоже зелёное, а снятие каталога ничего не покажет.

Смежное. Проверка, переставшая сравнивать, продолжает зеленеть · Снятая правка обязана красить тест · Побайтовая сверка со свидетелем — главный метод проверки · Перечень, записанный в проверке руками, переживает дерево