После того, как мы разместили небольшую заметку «Все делают ошибки при написании функций сравнения», у нас развернулась активная дискуссия на сайте Hacker News. К сожалению, в исходной заметке я не рассказал о том, как сработала диагностика, обнаружившая ошибку в OpenSSL.

Поэтому я хочу добавить пояснение. Как я вижу из комментариев, многие из вас думали, что анализатор PVS-Studio предупреждает о неиспользуемом аргументе функции. Это не совсем так. Точнее, это так, но анализатор обрабатывает этот случай умнее, чем большинство линтеров или компиляторов.

Плохая идея программировать анализатор так, чтобы он просто выдавал предупреждение на неиспользуемые аргументы. Такой анализатор будет выдавать много ложных срабатываний, поэтому многие разработчики не смотрят (или не отключают) эти предупреждения в своих компиляторах/анализаторах.

Анализатор PVS-Studio реализует своего рода эмпирическую «магию». PVS-Studio исходит из того, что есть аргументы одного типа и часть из них не используется, а часть используется несколько раз. В то же время существует ряд исключений из правил. Например, диагностика не запускается, если количество неиспользуемых аргументов превышает два.

Все это позволяет диагностике V751 выдавать мало ложных срабатываний, что выгодно отличает инструмент от конкурентов. Точнее, при разработке PVS-Studio мы не внедряем правила, если не можем сделать их лучше, чем у компиляторов. Благодаря описанной выше диагностике можно найти интересные ошибки — вроде этой.

P.S. Анализатор PVS-Studio также предоставляет глупую версию этой диагностики — V2537. Он был разработан для проверки кода на соответствие стандартам MISRA C и MISRA C++. Но случай выше был особенным, и по умолчанию эта диагностика была отключена — как и другие, связанные с MISRA.