Увидел свет новый выпуск являющегося частью проекта LLVM компилятора Clang с технологией SAFECode.
Данная технология предназначена для отслеживания возможных проблем работы с памятью в разрабатываемом приложении, при этом не изменяет поведение компилятора, когда неактивна. Включить её можно через указание специального ключа командной строки при сборке. Преимуществами по сравнению с таким инструментом как Valgrind являются:
- более информативные сообщения об ошибках;
- возможность оптимизации некоторых run-time проверок;
- отсутствие динамической трансляции как у Valgrind;
- более точно определяет структуру программы, так как знает расположение границ отдельного стека и глобальных объектов (для поиска данных границ Valgrind использует эвристические методы).
Сейчас технология позволяет отслеживать разыменования указателей, которые могут спровоцировать переполнение буфера. В дальнейшем планируется внести из проекта SAFECode в Clang:
- выявление некорректного доступа к памяти (указатели на несуществующий или удаленный объект);
- определение неправильных вызовов функции free(), например, двойное освобождение выделенной памяти;
- определение использования неинициализированных указателей;
- выявление ошибок при работе с памятью, вызванных неправильным использованием функций стандартной библиотеки;
- дополнительные оптимизации, включая удаление проверок корректности типов на этапе загрузки/сохранения и вынос за пределы циклов.
Clang это фронт-энд компиляторов С/С++, Objective-C, который разрабатывается на замену GCC в BSD-системах. Интересен может быть также крупным корпорациям благодаря лицензии BSD. При помощи Clang уже удалось собрать ядро Linux и фреймворк Qt