Efter sex mÄnaders utveckling presenterades lanseringen av LLVM 13.0-projektet - en GCC-kompatibel verktygslÄda (kompilatorer, optimerare och kodgeneratorer) som kompilerar program till mellanliggande bitkod av RISC-liknande virtuella instruktioner (en virtuell maskin pÄ lÄg nivÄ med en optimeringssystem pÄ flera nivÄer). Den genererade pseudokoden kan konverteras med hjÀlp av en JIT-kompilator till maskininstruktioner direkt vid tidpunkten för programexekveringen.
FörbÀttringar i Clang 13.0:
- Garanterade svansanrop (anrop av en subrutin i slutet av en funktion, vilket skapar en svansrekursion om subrutinen anropar sig sjÀlv) stöds. Garanterade svansanrop stöds med attributet "[[clang::musttail]]" i C++ och "__attribute__((musttail))" i C, som anvÀnds i uttrycket "return". Denna funktion möjliggör optimeringar genom att kod utvecklas till en platt iteration för att spara stackutrymme.
- Attributdefinitioner i C++11-stil stöds nu i clang "using"-deklarationer och -tillÀgg, med formatet "[[]]".
- Lade till flaggan "-Wreserved-identifier" för att visa en varning nÀr reserverade identifierare anges i anvÀndarkod.
- Lade till flaggorna "-Wunused-but-set-parameter" och "-Wunused-but-set-variable" för att skriva ut en varning om en parameter eller variabel Àr instÀlld men inte anvÀnds.
- Lade till flaggan "-Wnull-pointer-subtraction" för att varna om kod kan leda till odefinierat beteende pÄ grund av anvÀndning av en nullpekare i subtraktionsoperationer.
- Lade till flaggan "-fstack-usage" för att generera en ytterligare ".su"-fil för varje kodfil som innehÄller information om storleken pÄ stackframes för varje funktion som definieras i filen som bearbetas.
- En ny utdatatyp har lagts till i den statiska analysatorn â "sarif-html", vilket resulterar i att rapporter skapas i bĂ„de HTML- och Sarif-format. En ny kontroll har lagts till allocClassWithName. NĂ€r alternativet "-analyzer-display-progress" anges, matas analystiden för varje funktion ut. Den smarta pekaranalysatorn (alpha.cplusplus.SmartPtr) Ă€r nĂ€stan klar.
- Utökade funktioner relaterade till OpenCL-stöd. Lade till stöd för nya tillÀgg cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields och __cl_clang_non_portable_kernel_param_types. Fortsatt implementering av OpenCL 3.0-specifikationen. För C anvÀnds OpenCL 1.2-specifikationen som standard, sÄvida inte en annan version uttryckligen vÀljs. För C++ har stöd för filer med tillÀgget ".clcpp" lagts till.
- Stöd för looptransformationsdirektiv ("#pragma omp unrol" och "#pragma omp tile") som definieras i OpenMP 5.1-specifikationen har implementerats.
- Verktyget clang-format har uppdaterats med följande alternativ: SpacesInLineCommentPrefix för att bestÀmma antalet mellanslag före kommentarer, IndentAccessModifiers, LambdaBodyIndentation och PPIndentWidth för att styra justeringen av poster, lambda-uttryck och preprocessordirektiv. Möjligheten att sortera listan över headerfiler (SortIncludes) har utökats. Stöd för formatering av JSON-filer har lagts till.
- En stor mÀngd nya checkar har lagts till i det klang-tidy-skjortorna.
Viktiga innovationer i LLVM 13.0:
- Lade till alternativet "-ehcontguard" för att anvÀnda CET-teknik (Windows Control-flow Enforcement Technology) för att skydda mot exekvering av exploitationer som byggts med returorienterad programmering (ROP) i undantagshanteringsskedet.
- Projektet debuginfo-test har bytt namn till cross-project-tests och Àr utformat för att testa komponenter frÄn olika projekt, inte begrÀnsat till felsökningsinformation.
- Byggsystemet ger stöd för att bygga flera distributioner, till exempel en med verktyg och den andra med bibliotek för utvecklare.
- Backend-grÀnssnittet för AArch64-arkitekturen implementerar stöd för Armv9-A RME- och SME-tillÀggen (Realm Management Extension) i assembler.
- Stöd för ISA V68/HVX har lagts till i Hexagon-arkitekturens backend.
- X86-backend har förbÀttrat stöd för AMD Zen 3-processorer.
- Lade till stöd för GFX1013 RDNA2 APU till AMDGPU-backend.
- Libc++ fortsÀtter att implementera nya funktioner i C++20- och C++2b-standarderna, inklusive fÀrdigstÀllandet av "concepts"-biblioteket. För plattformen Windows Lade till stöd för std::filesystem baserat pÄ MinGW. Headerfiler har separerats. , Och Lade till byggalternativet LIBCXX_ENABLE_INCOMPLETE_FEATURES för att inaktivera headerfiler med ofullstÀndig funktionalitet.
- LLD-lÀnkaren har utökats för att stödja Big-endian Aarch64-processorer, och Mach-O-backend har förbÀttrats för att möjliggöra lÀnkning av vanliga program. FörbÀttringar som Àr nödvÀndiga för att lÀnka Glibc med LLD ingÄr.
- Verktyget llvm-mca (Machine Code Analyzer) har uppdaterats för att stödja superskalÀra pipeline-processorer i ordning, till exempel ARM Cortex-A55.
- LLDB-felsökaren för AArch64-plattformen har nu fullt stöd för Pointer Authentication, MTE-mekanismen (MemTag, Memory Tagging Extension) och SVE-register. Kommandon har lagts till för att binda taggar till varje minnesallokeringsoperation och för att kontrollera pekaren vid Ätkomst till minne, vilket mÄste vara bundet till en giltig tagg.
- LLDB-felsökaren och Fortran-grÀnssnittet Flang har lagts till i de binÀra sammansÀttningar som genereras av projektet.
KĂ€lla: opennet.ru
