Po roku vývoja bola vydaná bezplatná súprava kompilátorov GCC 14.1, prvé významné vydanie v novej vetve GCC 14.x. Podľa novej schémy číslovania vydaní bola pri vývoji použitá verzia 14.0 a krátko pred vydaním GCC 14.1 už bola vetva GCC 15.0 rozvetvená, z ktorej sa vytvorí ďalšie významné vydanie GCC 15.1.
Hlavné zmeny:
- Výrazne sa rozšírili možnosti statickej analýzy kódu v jazyku C, dostupné cez voľbu „-fanalyzer“ (statická analýza pre jazyk C++ ešte nebola uvedená do správnej podoby). Posilnená bola analýza operácií s reťazcami a kontrola prítomnosti reťazca ukončujúceho nulový znak. Pridané nové varovanie "-Wanalyzer-infinite-loop" na detekciu nekonečných slučiek. Pridaný rad upozornení „-Wanalyzer-tainted-*“ na identifikáciu problémov s overením vstupu. Varovanie „-Wanalyzer-out-of-bounds“ bolo vylepšené na detekciu pretečenia vyrovnávacej pamäte, napríklad bola pridaná možnosť zobraziť graf znázorňujúci stav vedúci k pretečeniu.

- Pridaná nová možnosť zostavenia „—enable-host-pie“ na vytváranie spustiteľných súborov kompilátora v režime PIE (Position Independent Executable), ako aj možnosť „—enable-host-bind-now“ pre väzbu s možnosťami „-Wl , -z, teraz“.
- Pridaná nová možnosť „-fhardened“, ktorá obsahuje príznaky na zvýšenie bezpečnosti (-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=nula -fPIE -pie -Wl,-z,relro,-z,now -fstack-protector -strong -fstack-clash-protection -fcf-protection=plný).
- Pridaná možnosť „-fharden-control-flow-redundancy“ na pridanie funkcií kódu na detekciu niektorých foriem nedefinovaného správania, ktoré by potenciálne mohlo viesť k toku riadenia spôsobenému exploitmi, ktoré upravujú ukazovatele uložených funkcií v pamäti a prenášajú kontrolu do stredu funkcií.
- Pridaný nový atribút typu „hardbool“, ktorý vám umožňuje prepísať hodnoty spojené s atribútmi true a false, aby sa určité typy útokov sťažili.
- Pridaný nový atribút typu strub na riadenie vymazania zásobníkových rámcov s funkciami a údajmi premenných po ukončení funkcie alebo vyvolaní výnimky.
- Pridaná možnosť -finline-stringops na umožnenie inline rozšírenia funkcií memcmp, memcpy, memmove a memset, aj keď to nie je potrebné na optimalizáciu.
- Pridaný nový funkčný atribút null_terminated_string_arg(PARAM_IDX) na označenie parametrov, ktoré by sa mali považovať za reťazce ukončené nulou.
- Vektorizér podporuje vektorizáciu slučiek obsahujúcich „break“ výrazy.
- Pridaná počiatočná podpora pre predbežnú verziu špecifikácie OpenMP 6.0 (Open Multi-Processing) a pokračujúca implementácia štandardov OpenMP 5.0, 5.1 a 5.2, ktoré definujú API a metódy na aplikáciu metód paralelného programovania na viacjadrové a hybridné (CPU+) GPU/DSP) systémy so zdieľanou pamäťou a blokovou vektorizáciou (SIMD).
- Vylepšená implementácia špecifikácií paralelného programovania OpenACC 2.7 a 3.2, ktoré definujú nástroje na znižovanie záťaže na GPU a špecializovaných procesoroch, ako je NVIDIA PTX.
- Pre C, C++ a Objective-C bola implementovaná podpora pre rozšírenia „__has_feature“ a „__has_extension“ používané v Clang.
- Sú implementované funkcie definované v budúcom štandarde C C23, ako napríklad typy „_BitInt (N)“ a „unsigned _BitInt (N)). Štruktúry, spojenia a enumerácie môžu byť definované viac ako raz v rovnakom rozsahu, viditeľné s rovnakým obsahom a opakujúcou sa značkou. Pridaná podpora pre hlavičkový súbor stdckdint.h. Parametre "-std=c23", "-std=gnu23" a "-Wc23-c11-compat" sú navrhnuté na aktiváciu podpory pre prvky C23.
- Pre jazyk C bol pridaný výraz „#pragma GCC novector“, ktorý znemožňuje vektorizáciu anotovaných slučiek.
- Pridané funkcie súvisiace so štandardom C++23. Pridaná podpora pre mechanizmus „Deducing this“, ktorý umožňuje použiť parametre s atribútom „this“ v šablóne a umožňuje z funkcie triedy zistiť kategóriu výrazu (napríklad, či ide o konštantu ), pre ktorý je táto funkcia volaná. Bola implementovaná požiadavka, podľa ktorej sa všetky funkcie volajúce funkcie s atribútom consteval stávajú aj consteval, t.j. sa vykonávajú počas kompilácie. Uvoľnil niektoré požiadavky na „constexpr“.
- Pridané funkcie súvisiace s budúcim štandardom C++2c (C++26). Napríklad je možné použiť reťazcové literály v kontexte, v ktorom sa nepoužívajú na inicializáciu poľa znakov a neskončia vo výslednom kóde, ale používajú sa iba v čase kompilácie na diagnostické správy a predbežné spracovanie. Pridaná možnosť používať viacero zástupných premenných s názvom „_“ v jednom rozsahu. Implicitné prevody vymenovaných hodnôt v aritmetických výpočtoch boli zastarané.
- libstdc++ má vylepšenú podporu pre štandardy C++20, C++23 a C++26.
- V kompilátore Fortran sa začali práce na podpore štandardu Fortran 2023 (-std=f2023).
- Podpora pre rozšírenie GCC, ktoré vám umožňuje špecifikovať flexibilný prvok poľa (pole neurčitej veľkosti, ako napríklad "int b[]"), ktoré nie je na samom konci štruktúry (Flexible Array Members), bola zastaraná. Pole neurčitej veľkosti sa potom môže použiť iba na konci štruktúry.
- Backend pre architektúru AArch64 podporuje CPU Ampere-1B (ampere1b), Arm Cortex-A520 (cortex-a520), Arm Cortex-A720 (cortex-a720), Arm Cortex-X4 (cortex-x4) a Microsoft Cobalt-100 ( kobalt-100). Nové generické CPU identifikátory, generic-armv8-a a generic-armv9-a, boli pridané na použitie vo voľbách „-mcpu=“ a „-mtune=“. Pridaná podpora pre Arm SME a SME2 (Streaming Matrix Extensions). Implementované optimalizácie špecifické pre architektúru AArch64.
- V backende pre architektúru ARM bola pridaná podpora pre procesory Cortex-M52 (cortex-m52 v možnostiach „-mcpu=“ a „-mtune=“).
- Backend generovania kódu pre GPU AMD Radeon (GCN) podporuje GPU AMD Radeon gfx90c (GCN5), gfx1030, gfx1036 (RDNA2), gfx1100 a gfx1103 (RDNA3). Vylepšený výkon pre zariadenia série AMD MI100 a MI200. Štandardne je aktivovaná architektúra zariadenia gfx900 (Vega).
- Do backendu architektúry x86 bola pridaná podpora pre rozšírenia architektúry Intel AVX10.1, Intel APX (čiastočné), Intel AVX-VNNI-INT16, Intel SHA512, Intel SM3, Intel SM4, Intel USER_MSR.
Pridaná podpora pre procesory AMD založené na jadre Zen 5 (-march=znver5), ako aj Intel Clearwater Forest (-march=clearwaterforest), Arrow Lake (-march=arrowlake), Arrow Lake S (-march=arrowlake-s ) procesory, Lunar Lake (-march=lunarlake) a Panther Lake (-march=pantherlake). Pridaná možnosť „-m[no-]evex512“ na ovládanie používania 512-bitových vektorov (v predvolenom nastavení povolená pri podpore AVX512F. Podpora CPU Intel Xeon Phi bola zastaraná.
- Možnosti backendu pre platformy LoongArch, AVR a RISC-V boli rozšírené.
- Rozšírili sa možnosti diagnostického výstupu vo formáte SARIF na báze JSON. Formát SARIF možno použiť na získanie výsledkov statickej analýzy (GCC -fanalyzer), ako aj na získanie informácií o varovaní a chybách.
- Podpora pre cieľové architektúry ia64 a nios2 používané v procesoroch Intel Itanium a Nios II bola zastaraná a bude odstránená v ďalšom vydaní GCC.
Zdroj: opennet.ru

