Udgivelse af LLVM 13.0 compiler suite

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

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster