The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз набора компиляторов LLVM 22

02.03.2026 12:15 (MSK)

После шести месяцев разработки представлен релиз проекта LLVM 22.1.0, развивающего инструментарий (компиляторы, оптимизаторы и генераторы кода), компилирующий программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован в машинный код для заданной целевой платформы или использован JIT-компилятором для формирования машинных инструкций непосредственно во время выполнения программы. На базе технологий LLVM проектом развивается компилятор Clang, поддерживающий языки программирования C, C++ и Objective-C. Начиная с ветки 18.x проект перешёл на новую схему формирования номеров версий, в соответствии с которой нулевой выпуск ("N.0") используется в процессе разработки, а первая стабильная версия снабжается номером "N.1".

Среди улучшений в Clang 22:

  • Добавлена поддержка токенов выделения памяти (Allocation Token) для маркировки уникальным идентификатором операций выделения памяти, осуществляемых при помощи таких функций, как malloc. Идентификаторы дают возможность структурировать информацию в куче (heap), упростить выявление утечек в памяти и реализовать группировку объектов на основе назначения или характера изменений (например, разделять "горячие" или "холодные" данные). Для включения следует использовать флаг "-fsanitize=alloc-token".
  • Возможности, связанные с языком С:
    • Реализован черновик спецификации, определяющей механизм отложенного выполнения "defer", дающий возможность выполнить действия в момент выхода из текущей области видимости. Для включения поддержи "defer" добавлен флаг "-fdefer-ts".
    • Добавлена встроенная функция __builtin_stack_address(), повторяющая аналогичную функцию в GCC. Функция возвращает адрес в стеке, разделяющий область стека текущей функции, вызвавшей __builtin_stack_address(), и в последующем вызываемыми функциями.
  • Возможности, развиваемые для будущего стандарта C2y:
    • Добавлена поддержка именованных циклов, позволяющих присваивать имена циклам и оператору switch, которые можно указывать в операторах break и continue для явного определения цикла, из которого производится выход.
      
         outer:
         for (int i = 0; i < IK; ++ i) {
           for (int j = 0; j < JK; ++ j) {
              continue;       // переход к CONT1
              continue outer; // переход к CONT2
              // CONT1
           }
           // CONT2
         }
      
    • Расширена и включена в стандарт реализация встроенного макроса "__COUNTER__", предназначенного для генерации уникальных имён идентификаторов. Выставлен лимит в 2147483647 вызовов данного макроса, после превышения которого будет выведена ошибка.
    • Убран вывод предупреждения (-Wstatic-in-inline) при использовании статических функций или переменных внутри функций, объявленных как "extern inline".
  • Возможности, определённые в Си-стандарте C23:
    • В заголовочный файл float.h добавлена поддержка макросов FLT_SNAN, DBL_SNAN и LDBL_SNAN, реализующих сигнальные (вызывающие исключение при использовании в арифметических операциях) значения NaN для типов float, double и long double.
    • Исправлена ошибка, из-за которой разные неименованные типы обрабатывались как совместимые в пределах одной единицы трансляции, если у них совпадали поля.
    • Флаг "-MG", используемый для игнорирования отсутствия заголовочных файлов при сканировании зависимостей, распространён на директивы "#embed" и теперь подавляет вывод ошибки "file not found" при отсутствии файла, указанного в директиве "#embed".
  • Возможности, связанные с С++:
    • Добавлена развиваемая в спецификации C++2с (C++26) возможность использования структурированных привязок (structured binding) в контексте "constexpr", т.е. ссылки на константные выражения теперь сами могут быть константными выражениями. Поддержка реализована для массивов и простых структур (кортежи пока не поддерживаются).
      
         constexpr int arr[] = {1, 2};
         constexpr auto [x, y] = arr; 
      
    • В соответствии с требованием стандарта C++20 обеспечено преобразование ограничений (constraints) в стандартную форму перед проверкой их выполнения, что позволяет выдавать более точные диагностические сообщения и правильно обрабатывать ошибки подстановки в аргументах шаблона, используемых только в concept-ids.
    • Добавлено семейство встроенных функций "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship", позволяющих узнать, были ли операторы сравнения "<", ">", "<=" и ">=" синтезированы из оператора "<=>".
    • Параметр "-Wincompatible-pointer-types" переведён на вывод ошибки вместо предупреждения. Для возвращения старого поведения следует использовать опцию "-Wno-error=incompatible-pointer-types".
  • Добавлены встроенные функции __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter и __builtin_dedup_pack. Например, builtin_dedup_pack позволяет удалить дубликаты из списка типов:
    
       using MyTypeList = TypeList<__builtin_dedup_pack<int, double, int, char, double>...>;
       // результирующий тип будет TypeList<int, double, char>
    
  • При отладке неопределённого поведения через UBSan (-fsanitize=undefined -fsanitize-trap=undefined) обеспечено добавление в генерируемую отладочную информацию сведений о причинах ошибок. Для задания уровня детализации информации об ошибках добавлен флаг "-fsanitize-debug-trap-reasons", который может принимать значение "basic" для общих описаний (например, "Integer addition overflowed") и "detailed" для включения развёрнутой информации (например, "signed integer addition overflow in 'a + b'").
  • Добавлены новые флаги компилятора:
    • "-f[no-]sanitize-debug-trap-reasons" для управления встраиванием причин возникновения исключений (trap) в отладочную информацию при компиляции в режиме "-fsanitize-trap".
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi" и "-fsanitize-alloc-token-extended" для управления токенами выделения памяти.
    • "-fmatrix-memory-layout" для управления размещением в памяти матричных типов (например, column-major - по столбцам, row-major - по строкам).
  • Для функций реализован атрибут "malloc_span", похожий на атрибут malloc, но применяемый к функциям, возвращающим span-подобные структуры, содержащие указатель и поле с размером или указателем на конец блока.
  • Добавлен атрибут "modular_format" для динамического выбора необходимой статически связываемой реализации функции printf во время компоновки.
  • Расширены средства диагностики и статического анализа, добавлены новые проверки (несколько десятков улучшений, связанных с диагностикой).
  • В бэкенд для архитектуры X86 добавлены дополнительные встроенные функции (Intrinsics) для расширений SSE, AVX и AVX512. Добавлены режимы сборки для CPU Intel на базе микроархитектур Wildcat Lake (-march=wildcatlake) и Nova Lake (-march=novalake).
  • В бэкенд для архитектуры AArch64 добавлена поддержка процессоров Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) и Arm C1-Ultra (c1-ultra). Добавлены дополнительные встроенные функции для инструкций FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], FCVTA[US]. Стабилизирована поддержка FMV (Function Multi-Versioning). Пользователям предоставлена возможность переопределения приоритета различных версий функций.
  • Добавлена поддержка архитектуры LoongArch32 (LA32R, LA32S).
  • Улучшены бэкенды для архитектур ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly и PowerPC.


  1. Главная ссылка к новости (https://discourse.llvm.org/t/l...)
  2. OpenNews: LLVM ввёл правила применения AI-инструментов. Curl и Node.js ограничат выплаты за уязвимости из-за AI
  3. OpenNews: Релиз набора компиляторов LLVM 21
  4. OpenNews: В Clang намерены добавить режим усиленной безопасности
  5. OpenNews: На базе Clang для языка Си реализован режим проверки границ буферов
  6. OpenNews: Релиз набора компиляторов GCC 15
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64898-llvm
Ключевые слова: llvm, clang
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (19) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.4, Карлос Сношайтилис (ok), 12:27, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > Возможности, связанные с языком С: Реализован черновик спецификации, определяющей механизм отложенного выполнения "defer"

    Если вы не идёте к RAII, RAII идёт к вам

     
  • 1.5, Аноним (5), 12:35, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Какой ещё ARM? Только ASML, только x64!
     
     
  • 2.11, Аноним (11), 13:15, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чего ?
    ARM это архитектура, а ASML делают литографы, которые потом покупает например TSMC и производит процессоры для Qualcomm или Apple.
    p.s.:
    - https://cdn.videocardz.com/1/2026/02/QUALCOMM-SNAPDRAGON-X2-ELITE-TEST-5.jpg
    - https://cdn.videocardz.com/1/2026/02/QUALCOMM-SNAPDRAGON-X2-ELITE-TEST-1.jpg
     

  • 1.6, Аноним (6), 12:46, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как ставить-то?
     
     
  • 2.9, dannyD (?), 13:12, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    В генту уже доступен.
     
  • 2.24, Аноним (24), 14:08, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Не спеши, может, компиляцию хрома опять сломали. Раст, опять же, к осени ждать только.
     

  • 1.7, Аноним (7), 12:57, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    >поддержка именованных циклов

    у раста подсмотрели)
    https://doc.rust-lang.org/std/keyword.break.html

     
     
  • 2.10, Аноним (10), 13:13, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Технологии языков прошлого века, когда родителей раста ещё не было в планах.
     
     
  • 3.15, нах.. (?), 13:43, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Но подсмотрели то у Раста)
     

  • 1.8, Аноним (-), 12:58, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Добавлена поддержка именованных циклов, позволяющих присваивать имена циклам и оператору switch, которые можно указывать в операторах break и continue для явного определения цикла, из которого производится выход.

    Что только не придумают, лишь бы goto не использовать.

     
  • 1.12, Сусанин (?), 13:28, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Добавлена поддержка именованных циклов, позволяющих присваивать имена циклам...

    Наконец-то сподобились перетащить это из Perl, в котором это уже десятки лет есть ровно с таким же синтаксисом.

     
     
  • 2.16, windowlicker (?), 13:44, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Из Раста же
     
     
  • 3.18, Аноним (18), 13:59, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Из чего? Это которые в разноцветных шапочках и из ямайки? Они тут причем?
     
  • 3.22, Аноним (22), 14:06, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Из Фортрана же
     
  • 2.21, Аноним (21), 14:02, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    GOTO ещё не перетащили?
     

  • 1.14, Аноним (14), 13:40, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Заголовок "Релиз набора компиляторов LLVM 22"
    Портянка "Среди улучшений в Clang 22"

    Так а в LLVM что-то изменили?

     
     
  • 2.17, Аноним (17), 13:45, 02/03/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Во-первых, clang - часть llvm, поэтому то что изменили в clang то изменили в llvm. Во-вторых, читай новость целиком.
     

  • 1.20, Аноним (20), 14:00, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    привет, goto, давно не виделись
     
  • 1.23, Аноним (23), 14:08, 02/03/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это ж любимая С++ная программа всех любителей раста.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру