Инструменты14 октября 2026 г., 22:18 МСК🤖 Auto

Apple отправила SSAF-драйвер в LLVM для автоматической трансформации кода

Инженеры Apple внесли в LLVM/Clang Scalable Static Analysis Framework (SSAF) — инструмент для анализа всей программы и автоматического исправления исходного кода, включая замену небезопасных указателей.

Баннер новости 9659

Что такое 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 ↗