Смотрю презентацию про статический анализ кода в Firefox.
Цифры поражают:
1.7 миллиона строк C++ и 1 миллион строк на Javascript.
В начале презентации упоминается парсер Elsa и препроцессор mcpp
Как я понял для статического анализа кода применяется комплекс Dehydra/Treehydra в основе своей состоящий из плагинов для GCC4.5, который позволяет создавать код на Javascript, который проверяет код C++.
Некоторые из возможны проверок:
запрет на наследование класса
требование переопределения метода
требование прохождения control flow через определенную точку программы (для отлавливания ошибочных return внутри макросов)
Для ускорения анализа используются идеи ESP: path-sensitive program verification in polynomial time
На основе статического анализа создается индекс DXR, который позволяет посмотреть, где определяется класс или откуда вызывается функция. Вроде бы он должен давать более точную информацию, чем предыдущий индекс MXR/LXR.
Edit: Ссылка на презентацию http://vimeo.com/12614626
Ссылка на слайды http://code.galois.com/talk/2010/10-06-glek/