Проект LLVM представил новый релиз - LLVM 21.1.0 - инструментарий, который объединяет компиляторы, оптимизаторы и генераторы кода и который используется многими системами и компиляторами.
И также вышел новая верси компилятора Clang - Clang 21, поддерживающий языки программирования C, C++ и Objective-C
Основные нововведения в Clang 21:
Для С++:
- реализована возможность использования константных выражений в ассемблерных вставках, определяемых директивой "asm":
- добавлена возможность вычисления на этапе компиляции (в контексте константного выражения) лямбда-функций
- добавлены расширенные варианты выражений "new" и "delete", поддерживающие аргумент "std::type_identity<T>", через который можно указать информацию о типе объекта, для которого выделяется или освобождается память.
- добавлена возможность использования синтаксиса "..." для указания оставшегося числа элементов последовательности.
- добавлена возможность применения структурированного связывания (structured binding) в качестве условия в операторах "if" и "switch".
- добавлены новые префиксы для восьмеричных литералов - "0o" и "0O", а также восьмеричные и шестнадцатеричные escape-последовательности "\o{...}" и "\x{...}". Поддержка восьмеричных литералов 0xxx объявлена устаревшей. Например, "0o123" и "\o{123}" вместо "0123".
- добавлен оператор "_Countof" для определения количества элементов в массиве. Также добавлен заголовочный файл stdcountof.h, определяющий вариант макроса "countof", реализованный через "_Countof".
Для Си стандарта C23:
- разрешено переопределять tag‑типы (struct, union, enum) в пределах одного блока трансляции, если повторные определения структурно эквивалентны (то же число членов, одинаковые типы и имена тегов).
- упрощено использование списков с переменным числом аргументов (variadic)
- добавлена совместимая с GCC встроенная функция "__builtin_c23_va_start()", улучшающая поведение диагностики для макроса va_start() в режиме C23.
- разрешено использовать квалификатор "restrict" для типов массивов с элементами-указателями.
Также добавлен ряд новых предупреждений и флагов компилятора. Расширены средства диагностики и статического анализа, добавлены новые проверки, связанных с диагностикой.
Улучшены бэкенды для архитектур ARM, Aarch64, AMDGPU, x86, RISC-V, LoongArch, MIPS и PowerPC. В бэкенд для RISC-V добавлена экспериментальная поддержка ассемблера для расширений Qualcomm uC, Andes и SiFive.
https://discourse.llvm.org/t/llvm-21-1-0-released/88066
Post #2119
1.76K