Ħruġ tas-suite tal-kompilaturi LLVM 13.0

Wara sitt xhur ta 'żvilupp, ġie ppreżentat ir-rilaxx tal-proġett LLVM 13.0 - sett ta' għodod kompatibbli mal-GCC (kompilaturi, ottimizzaturi u ġeneraturi tal-kodiċi) li jikkompila programmi f'bitcode intermedju ta 'struzzjonijiet virtwali bħal RISC (magna virtwali ta' livell baxx b' sistema ta’ ottimizzazzjoni f’diversi livelli). Il-psewdocode iġġenerat jista 'jiġi kkonvertit bl-użu ta' kompilatur JIT fi struzzjonijiet tal-magni direttament fil-ħin tal-eżekuzzjoni tal-programm.

Titjib f'Clang 13.0:

  • Appoġġ implimentat għal sejħiet ta 'denb garantit (sejħa ta' subrutina fl-aħħar nett ta 'funzjoni, li tifforma rikorżjoni ta' denb jekk is-subrutina titlob lilu nnifsu). L-appoġġ għal sejħiet tail garantiti huwa pprovdut mill-attribut "[[clang::musttail]]" f'C++ u "__attribute__((musttail))" f'Ċ, użat f'dikjarazzjoni ta '"ritorn". Il-karatteristika tippermettilek timplimenta ottimizzazzjonijiet billi tuża kodiċi f'iterazzjoni fissa biex tiffranka l-konsum tal-munzell.
  • "użu" dikjarazzjonijiet u estensjonijiet clang jipprovdu appoġġ għad-definizzjoni ta 'attributi stil C++11 bl-użu tal-format "[[]]".
  • Miżjud il-marka "-Wreserved-identifier" biex turi twissija meta l-identifikaturi riżervati jkunu speċifikati fil-kodiċi tal-utent.
  • Miżjud il-bnadar "-Wunused-but-set-parameter" u "-Wunused-but-set-variable" biex juru twissija jekk parametru jew varjabbli huwa ssettjat iżda mhux użat.
  • Miżjud il-marka "-Wnull-pointer-subtraction" biex toħroġ twissija jekk il-kodiċi jista' jintroduċi mġiba mhux definita minħabba l-użu ta' pointer null f'operazzjonijiet ta' tnaqqis.
  • Żid il-bandiera "-fstack-usage" biex tiġġenera għal kull fajl tal-kodiċi fajl ".su" addizzjonali li jkun fih informazzjoni dwar id-daqs tal-frejms tal-munzell għal kull funzjoni definita fil-fajl li qed jiġi pproċessat.
  • Ġie miżjud tip ta 'output ġdid mal-analizzatur statiku - "sarif-html", li jwassal għall-ġenerazzjoni ta' rapporti simultanjament f'formati HTML u Sarif. Miżjud verifika ġdida allocClassWithName. Meta tispeċifika l-għażla "-analyzer-display-progress", jintwera l-ħin tal-analiżi ta 'kull funzjoni. L-analizzatur smart pointer (alpha.cplusplus.SmartPtr) huwa kważi lest.
  • Il-kapaċitajiet assoċjati mal-appoġġ OpenCL ġew estiżi. Appoġġ miżjud għal estensjonijiet ġodda cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields u __cl_clang_non_portable_kernel_param_types. L-implimentazzjoni tal-ispeċifikazzjoni OpenCL 3.0 kompliet. Għal C, l-ispeċifikazzjoni OpenCL 1.2 tintuża awtomatikament sakemm ma tintgħażelx b'mod espliċitu verżjoni oħra. Għal C++, ġie miżjud appoġġ għal fajls bl-estensjoni ".clcpp".
  • Ġie implimentat appoġġ għad-direttivi tat-trasformazzjoni tal-linja (“#pragma omp unrol” u “#pragma omp tile”) definiti fl-ispeċifikazzjoni OpenMP 5.1.
  • Għażliet miżjuda mal-utilità clang-format: SpacesInLineCommentPrefix biex tiddefinixxi n-numru ta’ spazji qabel il-kummenti, IndentAccessModifiers, LambdaBodyIndentation u PPIndentWidth biex jikkontrollaw l-allinjament ta’ entrati, espressjonijiet lambda u direttivi ta’ preproċessur. Il-possibbiltajiet għall-issortjar tal-enumerazzjoni tal-fajls header (SortIncludes) ġew estiżi. Appoġġ miżjud għall-ifformattjar ta 'fajls JSON.
  • Porzjon kbir ta 'kontrolli ġodda ġew miżjuda għal linter clang-tidy.

Innovazzjonijiet ewlenin f'LLVM 13.0:

  • Żiedet l-għażla "-ehcontguard" biex tuża t-teknoloġija CET (Windows Control-flow Enforcement Technology) biex tipproteġi kontra l-eżekuzzjoni ta 'sfruttamenti mibnija bl-użu ta' tekniki ta 'Programmazzjoni Orjentata lejn Ritorn (ROP) fl-istadju tal-immaniġġjar tal-eċċezzjoni.
  • Il-proġett debuginfo-test ġie msemmi mill-ġdid cross-project-tests u huwa ddisinjat biex jittestja komponenti minn proġetti differenti, mhux limitat għall-informazzjoni tad-debugging.
  • Is-sistema ta 'assemblaġġ tipprovdi appoġġ għall-bini ta' diversi distribuzzjonijiet, pereżempju, waħda b'utilitajiet, u l-oħra b'libreriji għall-iżviluppaturi.
  • Fil-backend għall-arkitettura AArch64, l-appoġġ għall-estensjonijiet Armv9-A RME (Realm Management Extension) u SME (Scalable Matrix Extension) huwa implimentat fl-assemblatur.
  • L-appoġġ għal ISA V68/HVX ġie miżjud mal-backend għall-arkitettura Hexagon.
  • Il-backend x86 tejjeb l-appoġġ għall-proċessuri AMD Zen 3.
  • Appoġġ miżjud għall-GFX1013 RDNA2 APU mal-backend tal-AMDGPU.
  • Libc++ ikompli jimplimenta karatteristiċi ġodda tal-istandards C++20 u C++2b, inkluż it-tlestija tal-librerija tal-“kunċetti”. Appoġġ miżjud għal std::filesystem għall-pjattaforma Windows ibbażata fuq MinGW. Fajls tal-header separati , U . Miżjud l-għażla tal-bini LIBCXX_ENABLE_INCOMPLETE_FEATURES biex tiddiżattiva fajls header b'funzjonalità mhux implimentata bis-sħiħ.
  • Il-kapaċitajiet tal-linker LLD ġew estiżi, li fihom jiġi implimentat l-appoġġ għall-proċessuri Big-endian Aarch64, u l-backend Mach-O ġie mressaq għal stat li jippermetti li jgħaqqdu programmi regolari. Inkluż titjib meħtieġ biex jgħaqqad Glibc bl-użu ta 'LLD.
  • L-utilità llvm-mca (Analizzatur tal-Kodiċi tal-Magni) żiedet appoġġ għall-proċessuri li jeżegwixxu struzzjonijiet fl-ordni (pipeline superscalar fl-ordni), bħall-ARM Cortex-A55.
  • Id-debugger LLDB għall-pjattaforma AArch64 jipprovdi appoġġ sħiħ għar-reġistri tal-Power Authentication, MTE (MemTag, Memory Tagging Extension) u SVE. Kmandi miżjuda li jippermettulek torbot it-tikketti ma 'kull operazzjoni ta' allokazzjoni tal-memorja u torganizza kontroll tal-pointer meta taċċessa l-memorja, li għandha tkun assoċjata mat-tikketta korretta.
  • Id-debugger LLDB u l-frontend għal-lingwa Fortran - Flang ġew miżjuda mal-assemblaġġi binarji ġġenerati mill-proġett.

Sors: opennet.ru

Żid kumment