Efter seks måneders udvikling blev udgivelsen af LLVM 13.0-projektet præsenteret - et GCC-kompatibelt værktøjssæt (kompilatorer, optimeringsprogrammer og kodegeneratorer), der kompilerer programmer til mellembitcode af RISC-lignende virtuelle instruktioner (en virtuel maskine på lavt niveau med et optimeringssystem på flere niveauer). Den genererede pseudokode kan konverteres ved hjælp af en JIT-kompiler til maskininstruktioner direkte på tidspunktet for programudførelse.
Forbedringer i Clang 13.0:
- Garanterede halekald (kald af en subrutine i slutningen af en funktion, hvorved en halerekursion oprettes, hvis subrutinen kalder sig selv) understøttes. Garanterede halekald understøttes ved hjælp af attributten "[[clang::musttail]]" i C++ og "__attribute__((musttail))" i C, som bruges i udtrykket "return". Denne funktion muliggør optimeringer ved at udfolde kode til en flad iteration for at spare stakplads.
- Attributdefinitioner i C++11-stil understøttes nu i clang "using"-deklarationer og -udvidelser ved hjælp af formatet "[[]]".
- Tilføjet flaget "-Wreserved-identifier" for at vise en advarsel, når reserverede identifikatorer angives i brugerkode.
- Tilføjede flag "-Wunused-but-set-parameter" og "-Wunused-but-set-variable" for at udsende en advarsel, hvis en parameter eller variabel er indstillet, men ikke bruges.
- Tilføjet flaget "-Wnull-pointer-subtraction" for at vise en advarsel, hvis koden kan føre til udefineret adfærd på grund af brugen af en null-pointer i subtraktionsoperationer.
- Tilføjet flaget "-fstack-usage" for at generere en ekstra ".su"-fil for hver kodefil, der indeholder information om størrelsen af stakrammer for hver funktion, der er defineret i den fil, der behandles.
- En ny outputtype er blevet tilføjet til den statiske analysator — "sarif-html", hvilket resulterer i dannelsen af rapporter i både HTML- og Sarif-formater. En ny kontrol er blevet tilføjet allocClassWithName. Når indstillingen "-analyzer-display-progress" specificeres, udskrives analysetiden for hver funktion. Smart Pointer-analysatoren (alpha.cplusplus.SmartPtr) er næsten klar.
- Udvidede muligheder relateret til OpenCL-understøttelse. Tilføjet understøttelse af nye udvidelser cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields og __cl_clang_non_portable_kernel_param_types. Fortsat implementering af OpenCL 3.0-specifikationen. For C bruges OpenCL 1.2-specifikationen som standard, medmindre en anden version eksplicit vælges. For C++ tilføjet understøttelse af filer med filtypenavnet ".clcpp".
- Understøttelse af loop-transformationsdirektiver ("#pragma omp unrol" og "#pragma omp tile") defineret i OpenMP 5.1-specifikationen er blevet implementeret.
- Værktøjet clang-format er blevet opdateret med følgende indstillinger: SpacesInLineCommentPrefix til at bestemme antallet af mellemrum før kommentarer, IndentAccessModifiers, LambdaBodyIndentation og PPIndentWidth til at kontrollere justeringen af poster, lambda-udtryk og preprocessor-direktiver. Muligheden for at sortere listen over header-filer (SortIncludes) er blevet udvidet. Understøttelse af formatering af JSON-filer er blevet tilføjet.
- En stor mængde nye checks er blevet føjet til den klang-tidy linter.
Vigtigste innovationer i LLVM 13.0:
- Добавлена опция «-ehcontguard» для использования технологии CET (Windows Control-flow Enforcement Technology) для защиты на этапе обработки исключений от выполнения эксплоитов, построенных с использованием приёмов возвратно-ориентированного программирования (ROP, Return-Oriented Programming).
- debuginfo-test-projektet er blevet omdøbt til cross-project-tests og er designet til at teste komponenter fra forskellige projekter, ikke begrænset til fejlfindingsinformation.
- Byggesystemet understøtter opbygning af flere distributioner, for eksempel én med værktøjer og den anden med biblioteker til udviklere.
- Backend'en til AArch64-arkitekturen implementerer understøttelse af Armv9-A RME (Realm Management Extension) og SME (Scalable Matrix Extension) udvidelserne i assembler.
- Understøttelse af ISA V68/HVX er blevet tilføjet til Hexagon-arkitekturens backend.
- X86-backend'en har forbedret understøttelse af AMD Zen 3-processorer.
- Tilføjet understøttelse af GFX1013 RDNA2 APU til AMDGPU-backend.
- В Libc++ продолжена реализация новых возможностей стандартов C++20 и C++2b, в том числе завершена реализация библиотеки «concepts». Для платформы Windows на базе MinGW добавлена поддержка std::filesystem. Разделены заголовочные файлы <algorithm>, <iterator> и <utility>. Добавлена сборочная опция LIBCXX_ENABLE_INCOMPLETE_FEATURES для отключения заголовочных файлов с не полностью реализованной функциональностью.
- LLD-linkeren er blevet udvidet til at understøtte Big-endian Aarch64-processorer, og Mach-O-backend er blevet forbedret for at muliggøre linkning af almindelige programmer. Forbedringer, der er nødvendige for at linke Glibc ved hjælp af LLD, er inkluderet.
- Værktøjet llvm-mca (Machine Code Analyzer) er blevet opdateret til at understøtte superskalare pipeline-processorer i rækkefølge, såsom ARM Cortex-A55.
- LLDB-debuggeren til AArch64-platformen understøtter nu fuldt ud Pointer Authentication, MTE-mekanismen (MemTag, Memory Tagging Extension) og SVE-registre. Kommandoer er blevet tilføjet for at binde tags til hver hukommelsesallokeringsoperation og for at kontrollere pointeren ved adgang til hukommelse, som skal være bundet til et gyldigt tag.
- LLDB-debuggeren og Fortran-frontend Flang er blevet tilføjet til de binære assembleringer, der genereres af projektet.
Kilde: opennet.ru
