Что такое SSAF и зачем это нужно
Команда Apple Compiler Engineering отправила в основной репозиторий LLVM драйвер clang-ssaf-driver. Это инструмент для статического анализа на уровне всей программы (whole-program analysis) и трансформации исходного кода. В отличие от обычных линтеров, SSAF не просто находит ошибки, а генерирует патчи для их исправления, интегрируясь в процесс сборки.
Ключевая особенность — возможность добавлять собственные правила трансформации. Первым таким правилом стала проверка cpp-bounded-buffers, которая переписывает использование сырых указателей и массивов C++ на безопасные аналоги bounded_ptr и bounded_array, предотвращая переполнения буферов.
Как работает процесс
Драйвер работает в связке с системой сборки (например, make). Пользователь указывает только имя трансформации и команду сборки. SSAF анализирует зависимости, применяет правила и выдает результат двумя способами:
- Патч: файл с изменениями, который можно применить вручную или через
clang-apply-replacements. - Отчет: диагностическая информация в формате SARIF, совместимом с современными IDE и CI/CD системами.
Инструмент умеет разрешать конфликты слияния только внутри своих собственных изменений, игнорируя внешние правки, что снижает риск поломки чужого кода при автоматическом применении патчей.
Технические детали и интеграция
Решение является обобщением предыдущего проекта Apple clang-reforge. Разработчики стремились создать универсальный драйвер, отделенный от специфики конкретных трансформаций. Это позволяет легко добавлять новые правила анализа без переписывания ядра инструмента.
| Характеристика | Описание |
|---|---|
| Название компонента | clang-ssaf-driver |
| Первая трансформация | cpp-bounded-buffers (замена raw pointers на bounded_ptr) |
| Формат отчета | SARIF + стандартный вывод компилятора |
| Версия LLVM | LLVM 24 (релиз ожидается весной 2026 года) |
| Автор идеи | Jan Korous (Apple) |
Почему это важно
Для разработчиков C++ это шаг к автоматизации рефакторинга критически важных участков кода. Вместо ручного поиска и исправления потенциальных уязвимостей безопасности (переполнения буферов) инструмент может автоматически генерировать безопасный код. Для экосистемы LLVM это означает появление нового стандартизированного фреймворка для source-to-source трансформаций, который могут использовать не только Apple, но и другие крупные игроки.
Источник: Phoronix ↗
