PÀrast aasta arendust on avaldatud vaba GCC 14.1 kompilaatorite komplekti vÀljaanne, mis on esimene mÀrkimisvÀÀrne vÀljaanne uues GCC 14.x harus. Uue versioonide numbreerimise skeemi kohaselt kasutati arenduse kÀigus versiooni 14.0, ning just enne GCC 14.1 vÀljalaskmist hargnes juba GCC 15.0 haru, mille pÔhjal kujundatakse jÀrgmine mÀrkimisvÀÀrne vÀljaanne GCC 15.1.
Peamised muudatused:
- C keele staatilise koodi analĂŒĂŒsi vĂ”imalusi on oluliselt laiendatud, kasutades valikut â-fanalyzerâ (C++ jaoks ei ole staatilise analĂŒĂŒsi vĂ”imalusi veel piisavalt arendatud). RĂ”hku on pandud stringide toimingute analĂŒĂŒsile ja stringi lĂ”pus oleva nullmĂ€rgi olemasolu kontrollimisele. Uus hoiatus â-Wanalyzer-infinite-loopâ on lisatud igaveseks tsĂŒklite tuvastamiseks. Hoiatuste seeria â-Wanalyzer-tainted-*â on lisatud sisendi kontrollimise probleemide tuvastamiseks. Hoiatuse â-Wanalyzer-out-of-boundsâ vĂ”imalusi on laiendatud, et tuvastada puhverĂŒlevĂ€henemist, sealhulgas on lisatud diagrammi kuvamine, mis visualiseerib riigi, mis viib ĂŒleujutamiseni.

- Lisatud uus kogumise valik «âenable-host-pie», mis lubab kompilaatori tĂ€itmisfailide kogumist PIE (Position Independent Executable) reĆŸiimis, samuti valik «âenable-host-bind-now» sidumise jaoks valikute «-Wl,-z,now» abil.
- Lisatud uus valik «-fhardened», mis aktiveerib kaitseparameetrid (-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=zero -fPIE -pie -Wl,-z,relro,-z,now -fstack-protector-strong -fstack-clash-protection -fcf-protection=full).
- Lisatud valik «-fharden-control-flow-redundancy», mis lisab funktsioonide lÔppu koodi, et tuvastada teatud kujul mÀÀramatust kÀitumisest, mis vÔib potentsiaalselt rikkuda normaalset tÀitmise jÀrjekorda (control flow) exploitide toimel, mis muudavad mÀlus hoitavaid funktsiooni nÀitajaid ja suunavad kontrolli funktsioonide keskele.
- Lisatud uus tĂŒĂŒpide atribuut «hardbool», mis vĂ”imaldab ĂŒle kirjutada vÀÀrtused, mis on seotud true ja false tunnustega, et raskendada teatud tĂŒĂŒpi rĂŒnnakute sooritamist.
- Lisatud uus tĂŒĂŒpide atribuut strub, mis haldab funktsioonide ja muutujate kuhi nullimise andmeid pĂ€rast funktsiooni lĂ”petamist vĂ”i erandi toimumist.
- Lisaud vÔimalus -finline-stringops inline-funktsioonide memcmp, memcpy, memmove ja memset avamiseks, isegi kui see pole optimeerimise jaoks vajalik.
- Lisatud uus atribuut null_terminated_string_arg(PARAM_IDX) funktsioonidele, et mÀrkida parameetreid, mida tuleb tÔlgendada kui nullmÀrgiga lÔppevaid stringe.
- Vektorisatsioonis on rakendatud toimetuste vektorisatsiooni, mis sisaldavad 'break' vÀljendeid.
- Lisatud algtoetus OpenMP 6.0 eelversiooni spetsifikatsioonile (Open Multi-Processing) ning jĂ€tkatud OpenMP 5.0, 5.1 ja 5.2 standardite rakendamist, mis mÀÀratlevad API-d ja meetodite kasutamise viise paralleelse programmeerimise rakendamiseks mitme sĂŒdamiku ja hĂŒbriidsete (CPU+GPU/DSP) sĂŒsteemide puhul, mis kasutavad ĂŒhismĂ€lu ja vektorisatsiooni plokke (SIMD).
- Parandatud OpenACC 2.7 ja 3.2 paralleelse programmeerimise spetsifikatsioonide rakendust, mis mÀÀratlevad vahendeid operatsioonide GPU-le ja spetsialiseeritud protsessoritele, nagu NVIDIA PTX, edasiviimiseks.
- C, C++ ja Objective-C jaoks on rakendatud laienduste toimetuste toetamist '.__has_feature' ja '.__has_extension', mis on rakendatud Clangis.
- On ellu tulevas C-standardi C23 mÀÀratud vĂ”imalused, nagu tĂŒĂŒbid â_BitInt (N)â ja âunsigned _BitInt (N)â. Struktuure, liite ja loendeid on lubatud mÀÀrata rohkem kui ĂŒks kord ĂŒhes nĂ€htavas alas sama sisu ja korduva sildiga. Lisatud tugi pealkirjale stdckdint.h. C23 elementide toe lubamiseks on ettepanekud lipud â-std=c23â, â-std=gnu23â ja â-Wc11-c23-compatâ.
- C keele jaoks on lisatud vĂ€ljend â#pragma GCC novectorâ, mis keelab tĂ€histuslike silmade vektoreerimise.
- On lisatud vĂ”imalused, mis on seotud standardiga C++23. Lisatud tugi mehanismile âDeducing thisâ, mis vĂ”imaldab malli parameetritel, millel on tunnus âthisâ, ja annab vĂ”imaluse klassi funktsioonist teada saada, mis kategoorias vĂ€ljend (nĂ€iteks kas see on konstant) on, mille jaoks see funktsioon on kutsutud. Rakendatud on nĂ”ue, et kĂ”ik funktsioonid, mis kutsuvad esile funktsioone, millel on tunnus consteval, muutuvad samuti consteval, st need tĂ€idetakse kompileerimise ajal. MĂ”ningaid nĂ”udeid âconstexprâ on leevendatud.
- Lisatud tulevase C++2Ń (C++26) standardiga seotud vĂ”imalused. NĂ€iteks on nĂŒĂŒd vĂ”imalik kasutada stringliterale kontekstis, kus neid ei kasutata sĂŒmbolite massiivi initsialiseerimiseks ja nad ei jĂ”ua lĂ”ppkoodi, vaid neid kasutatakse ainult kompileerimisel diagnostiliste sĂ”numite ja eelprotsessimise jaoks. Samuti on lisatud vĂ”imalus kasutada mitut muutuja tĂ€itjat nimega â_â ĂŒhes ulatuses. Loetud vananenuks on muutunud automaatne enum-tĂŒĂŒpide aritmeetiliste arvutuste tĂŒkeldamine.
- Libstdc++-s on parandatud C++20, C++23 ja C++26 standardite toetust.
- Fortran keele kompilaatoris on alustatud Fortran 2023 standardi toetamisega (-std=f2023).
- GCC laienduse tugi, mis vĂ”imaldab mÀÀrata paindlikke massiivi elemente (mÀÀratlemata suurusega massiiv, nagu âint b[]â), ei ole enam toetatav, kui need ei ole struktuuri lĂ”pus. Edasi on mÀÀratlemata suurusega massiive vĂ”imalik kasutada ainult struktuuri lĂ”pus.
- AArch64 arhitektuuri tagaplaanis on rakendatud toetamist CPU Ampere-1B (ampere1b), Arm Cortex-A520 (cortex-a520), Arm Cortex-A720 (cortex-a720), Arm Cortex-X4 (cortex-x4) ja Microsoft Cobalt-100 (cobalt-100). Uued CPU ĂŒldised, generic-armv8-a ja generic-armv9-a identifikaatorid on lisatud valikutesse «-mcpu=» ja «-mtune=». Lisatud on tugi Arm SME ja SME2 (Streaming Matrix Extensions) laiendustele. Spetsiifilised optimiseerimised AArch64 arhitektuurile on samuti rakendatud.
- ARM arhitektuuri tagaplaanis on lisatud tugi CPU Cortex-M52 (cortex-m52 valikutes «-mcpu=» ja «-mtune=»).
- GPU AMD Radeon (GCN) koodi genereerimise tagaplaanis on rakendatud tugi GPU AMD Radeon gfx90c (GCN5), gfx1030, gfx1036 (RDNA2), gfx1100 ja gfx1103 (RDNA3). TÔhustatud on jÔudlust AMD MI100 ja MI200 seeria seadmetele. Vaikimisi on aktiveeritud arhitektuur gfx900 (Vega).
- x86 arhitektuuri tagaplaanis on lisatud tugi Intel AVX10.1 arhitektuuri kÀsukomplekti laiendustele, Intel APX (osaliselt), Intel AVX-VNNI-INT16, Intel SHA512, Intel SM3, Intel SM4 ja Intel USER_MSR.
Lisatud toetus AMD Zen 5 arhitektuuriga CPU-de jaoks (-march=znver5), samuti Intel Clearwater Forest (-march=clearwaterforest), Arrow Lake (-march=arrowlake), Arrow Lake S (-march=arrowlake-s), Lunar Lake (-march=lunarlake) ja Panther Lake (-march=pantherlake) protsessorite jaoks. Lisatud valik â-m[no-]evex512â, et juhtida 512-bitiste vektorite kasutamist (vaikimisi on aktiveeritud AVX512F toega). Intel Xeon Phi protsessorite tugi on kuulutatud aegunuks.
- LoongArch, AVR ja RISC-V platvormide taustsĂŒsteemide vĂ”imalusi on laiendatud.
- Diagnostikalogide vĂ€ljundi vĂ”imalusi on laiendatud SARIF-formaadis, mis pĂ”hineb JSON-il. SARIF-formaati saab kasutada staatilise analĂŒĂŒsi tulemuste (GCC -fanalyzer) ja hoiatuste ning vigade andmete saamiseks.
- Sihtarhitektuuride ia64 ja nios2 tugi, mida kasutatakse Intel Itanium ja Nios II protsessorites, on muudetud aegunuks ja eemaldatakse jÀrgmises GCC vÀljaandes.
Allikas: opennet.ru

