Zahájení novou verzi kompilátoru GCC (GNU Compiler Collection) 12.1 již byla vydána a stejně jako všechny hlavní verze GCC, i toto vydání přinese mnoho doplňků, vylepšení, oprav chyb a nových funkcí, navíc tento měsíc (23. května) projekt oslaví 35 let od vytvoření prvního vydání.
GCC 12 je již systémovým kompilátorem pro Fedoru 36 a GCC 12 bude také dostupný na Red Hat Enterprise Linux od Red Hat Developer Toolset (verze 7) nebo Red Hat GCC Toolset (verze 8 a 9).
Vývojáři GCC s hrdostí oznamují další hlavní vydání GCC, 12.1.
Letos slavíme 35. výročí první beta verze GCC
A tento měsíc oslavíme 35 let od vydání GCC 1.0!Toto vydání ruší podporu pro formát ladění STABS a
zavádí podporu pro formát ladění CTF [1]. Jazyky C a C++
rozhraní se stále vyvíjejí s rozšířenou podporou funkcí
v nadcházejících standardech C2X a C++23 a standardní knihovně C++
zlepšuje podporu pro experimentální části C++20 a C++23.
Rozhraní Fortran je nyní plně kompatibilní s TS 29113 pro interoperabilitu s C.
Co je nového v GCC 12.1?
V této nové verzi Bylo realizováno několik návrhů, například pro jazyky C a C++, přidáno vestavěná funkce __builtin_dynamic_object_size k určení velikosti objektu, kompatibilní s podobnou funkcí Clang.
Přidané podpora atributu "unavailable" pro jazyky C a C++ (můžete například označit funkce, které při použití způsobí chybu), stejně jako podporu direktiv předběžného zpracování "#elifdef" a "#elifndef" pro jazyky C a C++.
Je také třeba poznamenat, že Příznak "-Wbidi-chars" varuje, pokud jsou znaky UTF-8 zneužity, měnící obousměrné pořadí zobrazení textu a také příznak "-Warray-compare" pro zobrazení varování při pokusu o porovnání dvou operandů, které odkazují na pole.
Kromě toho iImplementace standardů OpenMP 5.0 a 5.1 Pokračovalo se (Open Multi-Processing), které definují API a metody pro aplikaci metod paralelního programování na vícejádrových a hybridních (CPU + GPU / DSP) systémech se sdílenou pamětí a vektorizačními jednotkami (SIMD).
Také vylepšená implementace specifikace paralelního programování OpenACC 2.6, definování prostředků pro snížení zátěže operací na GPU a specializovaných procesorech, jako je NVIDIA PTX, a přidání podpory pro rozšířené instrukce Intel AVX512-FP16 a typ _Float16 do backendu pro generování kódu x86.
Front-end Fortran poskytuje plnou podporu pro specifikaci TS 29113, která popisuje možnosti zajištění přenositelnosti mezi Fortran a C kódem.
Zastaralá podpora pro formát úložiště informací pro ladění „STABS“ vytvořený v 1980. letech.
Přidána podpora pro rozšíření __builtin_shufflevector(vec1, vec2, index1, index2, …) dříve přidané do Clang, které poskytuje jediné volání pro provádění běžných operací vektorového míchání a míchání.
Při použití úrovně optimalizace "-O2" je vektorizace standardně povolena (režimy -ftree-vectorize a -fvect-cost-model=velmi levné jsou povoleny). „Velmi levný“ model umožňuje vektorizaci pouze v případě, že vektorový kód může zcela nahradit vektorizovatelný skalární kód.
Přidán režim "-ftrivial-auto-var-init". umožnit explicitní inicializaci proměnných na zásobníku pro sledování problémů a blokování zranitelností spojených s používáním neinicializovaných proměnných.
Přidáno implementace funkcí C zabudovaných do kompilátoru (Intrinsics) pro atomické načítání a ukládání dat do paměti, založené na použití rozšířených instrukcí ARM (ls64). Přidána podpora pro zrychlení funkcí memcpy, memmove a memset pomocí rozšíření ARM mopoption.
Přidané nový ověřovací režim "-fsanitize=shadow-call-stack" ( ShadowCallStack ), který je aktuálně dostupný pouze pro architekturu AArch64 a funguje při kompilaci kódu s volbou "-fixed-r18". Režim poskytuje ochranu proti přepsání návratové adresy funkce v případě přetečení zásobníku zásobníku. Podstatou ochrany je po předání řízení funkci uložit návratovou adresu do samostatného „stínového“ zásobníku a před ukončením funkce tuto adresu načíst.
zdroj: https://gcc.gnu.org/pipermail