После шести месяцев разработки только что презентован запуск новой версии проекта «LLVM 13.0» Совместимость с GCC (компиляторы, оптимизаторы и генераторы кода), которая компилирует программы в промежуточный битовый код виртуальных инструкций, подобных RISC (низкоуровневая виртуальная машина с многоуровневой системой оптимизации).
В этой новой версии были добавлены различные изменения и новшества, из которых выделены улучшения поддержки а также реализация новых возможностей C ++ 20 и C ++ 2b среди прочего.
Основные новые возможности LLVM 13.0
В этой новой версии мы можем найти, что sи добавлена опция "-ehcontguard" для использования технологии CET (Windows Control-flow Enforcement Technology) для защиты на этапе обработки исключений при выполнении эксплойтов, созданных с использованием методов Return-Oriented Programming (ROP).
Кроме того, иПроект debuginfo-test переименован в cross-project-tests и он предназначен для тестирования компонентов из нескольких проектов, не ограничиваясь отладочной информацией, а система сборки обеспечивает поддержку для создания нескольких дистрибутивов, например, один с утилитами, а другой с библиотеками разработчика.
Более того Libc ++ продолжает реализовывать новые функции стандартов C ++ 20 и C ++ 2b., в том числе пополнение библиотеки «концепций», а также добавлена поддержка файловой системы std: для Windows на базе MinGW, также отдельные файлы заголовков , а также и опция сборки LIBCXX_ENABLE_INCOMPLETE_FEATURES была добавлена для отключения файлов заголовков с не полностью реализованной функциональностью.
В то время как бэкэнд для архитектуры AArch64 поддерживает расширения Armv9-A RME (Realm Management Extension) и SME (Scalable Matrix Extension) на ассемблере, Добавлена поддержка ISA V68 / HVX. к бэкэнду архитектуры Hexagon и бэкэнду x86 улучшена совместимость с процессорами AMD Zen 3 и добавлена поддержка APU GFX1013 RDNA2 в бэкэнд AMDGPU.
Возможности компоновщика LLD, который реализует поддержку процессоров Aarch64 с прямым порядком байтов, также были расширены, а серверная часть Mach-O переведена в состояние, позволяющее связывать обычные программы. Он включает необходимые улучшения для связывания Glibc с помощью LLD.
Утилита llvm-mca (анализатор машинного кода) добавляет поддержку упорядоченных суперскалярных конвейерных процессоров, таких как ARM Cortex-A55.
Отладчик LLDB для платформы AArch64 обеспечивает полную поддержку аутентификации указателя, MTE (MemTag, расширение тегов памяти) и регистры SVE, а также были добавлены команды, которые позволяют связывать теги с каждой операцией выделения памяти и организовывать при доступе к памяти проверку правильности указателя, который должен быть связан с тегом.
Отладчик LLDB и интерфейс Fortran - Flang были добавлены к бинарным сборкам, созданным проектом.
Что же касается Clang 13.0 подчеркивает улучшения:
- Реализована поддержка гарантированных вызовов очереди (вызов подпрограммы в конце функции, которая формирует рекурсию очереди, если подпрограмма вызывает сама себя).
- Добавлены флаги «-Wunused-but-set-parameter» и «-Wunused-but-set-variable» для отображения предупреждения, если параметр или переменная установлена, но не используется.
- Добавлен флаг «-Wnull-pointer-subtraction» для отображения предупреждения, если код может привести к неопределенному поведению из-за использования нулевого указателя в операциях вычитания.
- Добавлен флаг «-fstack-use» для создания для каждого файла кода дополнительного файла «.su», который содержит информацию о размере фреймов стека для каждой функции, определенной в обработанном файле.
- В статический синтаксический анализатор был добавлен новый тип вывода, «sarif-html», который позволяет одновременно генерировать отчеты в форматах HTML и Sarif.
- Добавлена новая проверка для allocClassWithName. Когда указана опция «-analyzer-display-progress», отображается время синтаксического анализа для каждой функции. Парсер умного указателя (alpha.cplusplus.SmartPtr) почти готов.
- Реализована поддержка директив преобразования цикла («#pragma omp unrol» и «#pragma omp tile»), определенных в спецификации OpenMP 5.1.
- Большая часть новых проверок была добавлена в linter clang-tidy.
В конце концов Если вам интересно узнать об этом больше, вы можете проверить детали По следующей ссылке.