Vrijgave van de LLVM 22-compilersuite

Na zes maanden ontwikkeling is LLVM 22.1.0 uitgebracht. Het ontwikkelt tools (compilers, optimizers en codegeneratoren) die programma's compileren naar intermediaire bitcode van RISC-achtige virtuele instructies (een low-level virtuele machine met een multilevel optimalisatiesysteem). De gegenereerde pseudocode kan worden omgezet in machinecode voor een bepaald doelplatform of worden gebruikt door een just-in-time (JIT) compiler om direct tijdens de programma-uitvoering machine-instructies te genereren. Gebaseerd op LLVM-technologieΓ«n ontwikkelt het project de Clang-compiler, die de programmeertalen C, C++ en Objective-C ondersteunt. Vanaf de 18.x-tak is het project overgestapt op een nieuw versienummeringsschema, waarbij release 0 ("N.0") wordt gebruikt tijdens de ontwikkeling en de eerste stabiele versie "N.1" krijgt.

Verbeteringen in Clang 22 zijn onder meer:

  • Er is ondersteuning toegevoegd voor geheugentoewijzingstokens (Allocation Tokens) om geheugentoewijzingsbewerkingen die worden uitgevoerd met functies zoals malloc te markeren met een unieke identificatiecode. Toewijzingstokens maken het mogelijk om heapinformatie te structureren, de detectie van geheugenlekken te vereenvoudigen en objecten te groeperen op basis van hun doel of wijzigingspatronen (bijvoorbeeld het scheiden van 'hete' en 'koude' gegevens). Om dit in te schakelen, gebruikt u de vlag '-fsanitize=alloc-token'.
  • Kenmerken die verband houden met de C-taal:
    • Er is een conceptspecificatie geΓ―mplementeerd die het "defer"-mechanisme voor uitgestelde uitvoering definieert, waardoor acties kunnen worden uitgevoerd wanneer de huidige scope wordt afgesloten. De vlag "-fdefer-ts" is toegevoegd om "defer"-ondersteuning in te schakelen.
    • De ingebouwde functie __builtin_stack_address() is toegevoegd, vergelijkbaar met de functie in GCC. Deze functie retourneert het stackadres dat het stackgebied scheidt van de functie die __builtin_stack_address() aanroept en de daaropvolgende functies die deze aanroept.
  • Mogelijkheden die worden ontwikkeld voor de toekomstige C2y-standaard:
    • Ondersteuning voor benoemde lussen is toegevoegd. Hiermee kunt u namen toewijzen aan lussen en switch-statements, die vervolgens in break- en continue-statements kunnen worden gespecificeerd om expliciet aan te geven uit welke lus moet worden weggegaan. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // ga naar CONT1 continue outer; // ga naar CONT2 // CONT1 } // CONT2 }
    • De implementatie van de ingebouwde macro "__COUNTER__", ontworpen om unieke identificatienamen te genereren, is uitgebreid en opgenomen in de standaard. Er is een limiet van 2147483647 aanroepen van deze macro ingesteld; overschrijding van deze limiet zal een foutmelding genereren.
    • De waarschuwing (-Wstatic-in-inline) die werd gegeven bij het gebruik van statische functies of variabelen binnen functies die als "extern inline" waren gedeclareerd, is verwijderd.
  • Mogelijkheden gedefinieerd in de C23 C-standaard:
    • Het headerbestand float.h ondersteunt nu de macro's FLT_SNAN, DBL_SNAN en LDBL_SNAN, die signaled (en een uitzondering veroorzaken bij gebruik in rekenkundige bewerkingen) NaN-waarden implementeren voor de typen float, double en long double.
    • Er is een bug verholpen waarbij verschillende naamloze gegevenstypen als compatibel werden beschouwd binnen dezelfde vertaaleenheid als ze dezelfde velden hadden.
    • De "-MG"-vlag, die werd gebruikt om ontbrekende headerbestanden te negeren tijdens het scannen naar afhankelijkheden, is uitgebreid naar "#embed"-richtlijnen en onderdrukt nu de foutmelding "bestand niet gevonden" wanneer een bestand dat is gespecificeerd in een "#embed"-richtlijn ontbreekt.
  • C++-gerelateerde functies:
    • De mogelijkheid om gestructureerde bindingen te gebruiken in de "constexpr"-context, zoals ontwikkeld in de C++2c (C++26)-specificatie, is toegevoegd. Dit betekent dat verwijzingen naar constante expressies nu zelf ook constante expressies kunnen zijn. Ondersteuning is geΓ―mplementeerd voor arrays en eenvoudige structuren (tuples worden nog niet ondersteund). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Zoals vereist door de C++20-standaard, worden beperkingen nu omgezet naar de standaardvorm voordat ze worden gecontroleerd. Dit maakt nauwkeurigere diagnostische berichten mogelijk en zorgt voor een correcte afhandeling van substitutiefouten in sjabloonargumenten die alleen in concept-ID's worden gebruikt.
    • Er is een reeks ingebouwde functies "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" toegevoegd om te achterhalen of de vergelijkingsoperatoren "<", ">", "<=" en ">=" zijn afgeleid van de operator "<=>".
    • De parameter "-Wincompatible-pointer-types" is gewijzigd en geeft nu een foutmelding in plaats van een waarschuwing. Om terug te keren naar het vorige gedrag, gebruikt u de optie "-Wno-error=incompatible-pointer-types".
  • De volgende ingebouwde functies zijn toegevoegd: __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter en __builtin_dedup_pack. Met builtin_dedup_pack kunt u bijvoorbeeld duplicaten uit een lijst met typen verwijderen: using MyTypeList = TypeList<__builtin_dedup_pack …>; // het resulterende type zal TypeList zijn
  • Bij het debuggen van ongedefinieerd gedrag met UBSan (-fsanitize=undefined -fsanitize-trap=undefined) wordt nu informatie over de oorzaak van de fout opgenomen in de gegenereerde debuginformatie. De vlag "-fsanitize-debug-trap-reasons" is toegevoegd om het detailniveau van de foutinformatie te specificeren. Deze kan worden ingesteld op "basic" voor algemene beschrijvingen (bijv. "Integer-optelling is mislukt door overloop") en op "detailed" voor gedetailleerde informatie (bijv. "Optelling van getekende gehele getallen is mislukt door overloop in 'a + b'").
  • Nieuwe compilervlaggen toegevoegd:
    • "-f[no-]sanitize-debug-trap-reasons" om te bepalen of de redenen voor exception traps worden opgenomen in de debug-informatie bij het compileren met de modus "-fsanitize-trap".
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi" en "-fsanitize-alloc-token-extended" worden gebruikt om geheugenallocatietokens te beheren.
    • "-fmatrix-memory-layout" om de geheugenindeling van matrixtypen te beheren (bijv. column-major voor kolomgeoriΓ«nteerde matrices, row-major voor rijgeoriΓ«nteerde matrices).
  • Functies hebben nu een "malloc_span"-attribuut, vergelijkbaar met het malloc-attribuut, maar van toepassing op functies die span-achtige structuren retourneren die een pointer en een veld met de grootte of een pointer naar het einde van het blok bevatten.
  • Het attribuut "modular_format" is toegevoegd om tijdens het linken dynamisch de vereiste statisch gelinkte implementatie van de printf-functie te selecteren.
  • De diagnostische en statische analysetools zijn uitgebreid en er zijn nieuwe controles toegevoegd (tientallen verbeteringen op het gebied van diagnostiek).
  • Er zijn extra intrinsieke functies voor de SSE-, AVX- en AVX512-extensies toegevoegd aan de X86-backend. Er zijn buildmodi toegevoegd voor Intel CPU's gebaseerd op de Wildcat Lake (-march=wildcatlake) en Nova Lake (-march=novalake) microarchitecturen.
  • De AArch64-backend ondersteunt nu de Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) en Arm C1-Ultra (c1-ultra) processors. Er zijn extra ingebouwde functies toegevoegd voor de FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] en FCVTA[US] instructies. De ondersteuning voor Function Multi-Versioning (FMV) is gestabiliseerd. Gebruikers kunnen nu de prioriteit van verschillende functieversies overschrijven.
  • Ondersteuning toegevoegd voor de LoongArch32-architectuur (LA32R, LA32S).
  • Verbeterde backends voor ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly en PowerPC-architecturen.

Bron: opennet.ru

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers πŸ”₯ Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster