Я с незапамятных времен привык компилировать весь свой код со всеми включенными предупреждениями (/W4 /WX /Wall для VC++), и он у меня набит Assume/Assert, так что статическим анализом никогда систематически не занимался — когда-то попробовал анализатор из WDK, но он мне не понравился. В кои веки решил попробовать последние компиляторы VC++ с ключом /analyze. Сразу же пошли (от компилятора 19.29.30147) предупреждения такого вида:
warning C6011: Dereferencing NULL pointer 'p
на таком примерно коде:
void f (int * p) {
if (p == nullptr) Break ();
*p = 0;
}
На самом деле на месте таких if у меня везде стоят Assert'ы, которые примерно так и раскрываются.
Хохма в том, что при удалении if'а предупреждение анализатора пропадает.
Чтобы оно пропало при наличии if'а, нужно использовать какую-то особую форму обработки условия? Или это просто глюк анализатора, и надо писать багрепорт?