Как стать автором
Обновить

Комментарии 11

Хороший способ отпраздновать! Надеюсь после-праздничный email с найдеными ошибками будет отправлен на разработчикам?

Да, обязательно отпишу :)

Не очень понятна первая ошибка. У вас выделена строчка:

 if (speakup_console[vc->vc_num])                     // <=

Которая не является макросом spd_killed.

Также, ожидалось, что будет ругаться на разыменование указателя vc

Макрос там в коде раньше встречается.

Я вижу, но стрелка не на него

В этом, как бы, и задумка, чтобы было не понятно до прочтения описания.

А что с vc? Почему он без внимания?

А что с ним не так?) Если вы про то, почему на него не ругнулись - он во всех случаях разыменуется без проверки. Выдавать на каждое такое использование указателя в функции глупо, т.к. будет много ложных срабатываний. Да, есть __attribute__((nonnull)), но присутствует он не во всех компиляторах и не всегда используется (как, например, в этом случае).

Интересно. Банальную ошибку с бесконечной рекурсией PVS пропускает

// Type your code here, or load an example.
unsigned  squarerec(unsigned  num) 
{
    if (num <= 1) return 1;
    return squarerec(num) * num;
}

как с флагами --incremental --analysis-mode=4 так и без них

Банальную ошибку

Ну это как посмотреть. Проблема остановки:

Проблема остановки (англ. Halting problem) — это одна из проблем в теории алгоритмов[1], которая может неформально быть поставлена в виде:

Даны описание процедуры и её начальные входные данные. Требуется определить: завершится ли когда-либо выполнение процедуры с этими данными; либо, что процедура всё время будет работать без остановки.

Алан Тьюринг доказал в 1936 году, что проблема остановки неразрешима на машине Тьюринга. Другими словами, не существует общего алгоритма решения этой проблемы.[2]

Т.е. на while(true); (именно в это компилирует gcc -O2) можно даже варнинг не выкидывать, только потому, что так сказал Тьюринг.

Понимаю, если бы была хитрая вложенная рекурсия - но тут "хвостовая" элементарщина, а (num) вместо (num-1) : просто отвлекли - начальник попросил расписаться в ведомости расчёток.

UPD: Граф потока управления может быть использован для быстрой категоризации, когда программа не имеет циклов (и поэтому останавливается), имеет тривиальные циклы (и поэтому останавливается), имеет нетривиальные циклы (неразрешимо) или входит в бесконечный цикл. По вашей же ссылки - данное зацикливание отлавливается потому что хвостовая рекурсия легко разворачивается в цикл (gcc же сумел раскрутить рекурсию в jmp 0x-2)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий