Comments 23
UFO just landed and posted this here
Видимо, был выбран Windows для сборки и анализа проекта. Под эту платформу CMake не умеет генерить compile_commands.json. С другой стороны, из CMakeLists можно сделать проект для Visual Studio, но это уже вопрос к автору.
В любом случае, это уже дело вкуса, т.к. сейчас анализатор поддерживаетпочти всё. Я, например, предпочитаю сборочные системы для Linux, чтобы проверять проекты в Docker.
В любом случае, это уже дело вкуса, т.к. сейчас анализатор поддерживает
На тему космоса :)
NASA обновили свой статический анализатор
github.com/NASA-SW-VnV/ikos
Не смотрели, что за зверь?
NASA обновили свой статический анализатор
github.com/NASA-SW-VnV/ikos
Не смотрели, что за зверь?
Дело в том, что все ветви if...else имеют return
Это на основании того что анализируемое значение enum? Частенько использую что то вроде enum class SomeId { null = 0 }. Ну и проверки вроде if(id == SomeId::null) return; Всё за такой проверкой будет считаться unreachable?
На основании того, что там просто return. Неважно, что в условии, если в итоге выполняется return или return.
Что касается содержимого условий (enum, не enum, неважно), есть другой тип недостижимого кода, который находит эта диагностика. После того, как Dataflow-анализ определяет Always True/False ветви, выполняется дополнительный поиск недостижимого кода уже с учётом этой информации.
Что касается содержимого условий (enum, не enum, неважно), есть другой тип недостижимого кода, который находит эта диагностика. После того, как Dataflow-анализ определяет Always True/False ветви, выполняется дополнительный поиск недостижимого кода уже с учётом этой информации.
Но там же if/elsif/elsif. Ветки else нет. Судить о недостижимом можно только по тому что в этих ветках проверены все значения enum.
А если enum вышел из диапазона возможных значений, то это уже UB. :)
Это уже другая сущность. Я про классический enum. :)
И в классическом
enum
всё то же самое — за исключением того, что мы заранее не знаем какой тип будет выбран компилятором.На самом деле даже этого нету. Для обычного enum-а можно указать базовый тип, если ну указать — тогда компилятор выбирает, да, но обычно это int. Надо в стандарте посмотреть, всегда ли это должен быть int.
Не совсем так. Неопределённое поведение — это когда вы выходите за границы выбранного компилятором типа. Положить в
enum { hi = 2, ho = 4 } hiho;
троечку не запрещено.В примере с рефакторингом через switch последние две строки просто переходят в default ветку. И перестают считаться unreachable.
А есть разбор pvs-studio? Что плохого pvs-studio нашел в коде самого pvs-studio?
> Легко понять, что умножение 12 на 1 бессмысленно, а скобки вокруг 2 * order не нужны.
Легко заметить что x << n = x * (2^(n+1)). И (x * 1) << n эквивалентно x * (1 << n). А вот вторые скобки обязательны. Чтобы не вспоминать про приоритеты.
Легко заметить что x << n = x * (2^(n+1)). И (x * 1) << n эквивалентно x * (1 << n). А вот вторые скобки обязательны. Чтобы не вспоминать про приоритеты.
часть ошибок должен подсвечивать компилятор:
Вероятно, часть диагностик компиляторов по историческим причинам выключались, и в итоге выросли ошибки, для поимки которых (казалось бы) никакой PVS не нужен
static const SphericalCap cap3(0,0,-1); // unused variable
...
QVector<double> xs, ys; // unused variable
...
updatePos = true; // invariant
...
setFlagAtmosphere(pl->hasAtmosphere()
& conf->value("landscape/flag_atmosphere", true).toBool()); // operator & on bool
Вероятно, часть диагностик компиляторов по историческим причинам выключались, и в итоге выросли ошибки, для поимки которых (казалось бы) никакой PVS не нужен
Sign up to leave a comment.
И снова в космос: как единорог Stellarium посещал