В конце прошлого года Бен Портер спросил в Твиттере, может ли компилятор найти неправильное использование итераторов в этом коде:

std::vector<int> to_vector(int value)
{
  std::vector<int> a, b;
  a.insert(b.end(), value);
  return a;
}

Джейсон Тернер (ведущий CppCast) тогда ответил и предложил, что это может сделать анализатор PVS-Studio: Я не могу тестировать сразу, но думаю, что PVS-Studio умеет ловить такие ошибки «@Code_Analysis. Я знаю, что некоторые инструменты статического анализа могут, так что это должно быть понятно».

Получив уведомление, я ознакомился с вопросом и хотел убедиться, что анализатор PVS-Studio действительно может найти такие ошибки с помощью диагностики V539. Ну, хотел, но не смог :(. Оказывается, это как раз тот случай, когда анализатор не может определить, о чем и пришлось написать.

Однако я не отказался от этой идеи. Мы завершили диагностику V539. Сегодня у нас очередной релиз PVS-Studio, который содержит следующее сообщение. Он будет выдан для приведенного выше кода:

V539 [CWE-688] Рассмотрите возможность проверки итераторов, которые передаются в качестве аргументов функции «вставка». test.cpp 43

Ура! Спасибо всем. Мы очень рады собирать шаблоны ошибок, которые мы до сих пор не можем диагностировать, и благодарны всем, кто присылает их нам. Так что, если что, напишите мне или в нашу поддержку.

Помимо описанного улучшения, в релизе PVS-Studio 7.06 были добавлены следующие возможности:

  • 20 новых диагностик;
  • PVS-Studio теперь можно использовать вместе с кроссплатформенной IDE для разработки встраиваемых систем PlatformIO;
  • Анализатор C# PVS-Studio теперь понимает проверки Unity-указанных переменных на null через их неявное приведение к типу bool;
  • "читать далее".

Вы можете скачать и попробовать новую версию анализатора PVS-Studio. Используйте промокод #pvs706, чтобы получить лицензионный ключ на месяц вместо недели. Просто введите #pvs706 в поле сообщение при запросе пробного ключа на странице загрузки.