Rilascio del set di compilatori GCC 14

Dopo un anno di sviluppo, è stata pubblicata la release del compilatore GCC 14.1, il primo rilascio significativo della nuova serie GCC 14.x. Secondo il nuovo schema di numerazione delle versioni, la versione 14.0 è stata utilizzata durante lo sviluppo, e poco prima del rilascio di GCC 14.1 è già stata creata la branch GCC 15.0, sulla quale sarà basato il prossimo rilascio significativo GCC 15.1.

Principali modifiche:

  • Sono state notevolmente ampliate le capacità di analisi statica del codice in C, disponibili tramite l'opzione "-fanalyzer" (l'analisi statica per C++ non è ancora sviluppata adeguatamente). È stato rafforzato l'analisi delle operazioni sulle stringhe e il controllo della presenza del carattere nullo finale. È stato aggiunto un nuovo avviso "-Wanalyzer-infinite-loop" per rilevare cicli infiniti. È stata introdotta una serie di avvisi "-Wanalyzer-tainted-*" per identificare problemi di convalida dell'input. Sono state ampliate le capacità dell'avviso "-Wanalyzer-out-of-bounds" per rilevare overflow di buffer, ad esempio, è stata aggiunta la possibilità di visualizzare un diagramma con la visualizzazione dello stato che porta all'overflow.
    Rilascio del set di compilatori GCC 14
  • È stata aggiunta una nuova opzione di compilazione «—enable-host-pie» per la creazione di file eseguibili del compilatore in modalità PIE (Position Independent Executable), nonché l'opzione «—enable-host-bind-now» per il collegamento con le opzioni «-Wl,-z,now».
  • È stata aggiunta una nuova opzione «-fhardened», che abilita i flag per migliorare la sicurezza (-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).
  • È stata aggiunta l'opzione «-fharden-control-flow-redundancy» per l'inserimento alla fine delle funzioni di codice volto a rilevare alcune forme di comportamento indefinito, che potrebbero potenzialmente alterare l'ordine normale di esecuzione (control flow) a causa di exploit che modificano i puntatori in memoria a funzioni e trasferiscono il controllo all'interno delle funzioni.
  • È stato aggiunto un nuovo attributo di tipo «hardbool», che consente di sovrascrivere i valori associati ai segni true e false per complicare alcuni tipi di attacchi.
  • È stato aggiunto un nuovo attributo di tipo strub per gestire l azzeramento dei frame dello stack contenenti dati di funzioni e variabili dopo l'uscita dalla funzione o al verificarsi di un'eccezione.
  • Aggiunta l'opzione -finline-stringops per abilitare l'espansione in linea delle funzioni memcmp, memcpy, memmove e memset, anche quando non è necessaria per l'ottimizzazione.
  • Aggiunto un nuovo attributo per le funzioni null_terminated_string_arg(PARAM_IDX) per contrassegnare i parametri che devono essere interpretati come stringhe terminate da carattere nullo.
  • Implementato nel vettorizzatore il supporto per la vettorizzazione dei cicli che contengono espressioni 'break'.
  • Introdotto il supporto iniziale per la versione preliminare della specifica OpenMP 6.0 (Open Multi-Processing) e continuata l'attuazione degli standard OpenMP 5.0, 5.1 e 5.2, che definiscono le API e le modalità di applicazione dei metodi di programmazione parallela su sistemi multicore e ibridi (CPU+GPU/DSP) con memoria condivisa e blocchi di vettorizzazione (SIMD).
  • Migliorata l'implementazione delle specifiche di programmazione parallela OpenACC 2.7 e 3.2, che definiscono gli strumenti per l'offloading su GPU e processori specializzati come NVIDIA PTX.
  • Per C, C++ e Objective-C è stato implementato il supporto per le estensioni '__has_feature' e '__has_extension', utilizzate in Clang.
  • Sono state implementate le funzionalità definite nel futuro standard C per il C23, come i tipi «_BitInt (N)» e «unsigned _BitInt (N)». Le strutture, le unioni e le enumerazioni possono essere definite più di una volta in un'area visibile con lo stesso contenuto e tag ripetuti. È stata aggiunta la supporto per il file di intestazione stdckdint.h. Per abilitare il supporto per gli elementi C23, sono stati proposti i flag «-std=c23», «-std=gnu23» e «-Wc11-c23-compat».
  • Per il linguaggio C è stata aggiunta l'espressione «#pragma GCC novector», che disabilita la vettorizzazione dei cicli annotati.
  • Sono state aggiunte funzionalità correlate allo standard C++23. È stato aggiunto il supporto per il meccanismo «Deducing this», che permette di utilizzare nei template parametri contrassegnati da «this» e consente a una funzione di classe di conoscere la categoria dell'espressione (ad esempio, se è una costante) per la quale questa funzione è stata chiamata. È stata implementata la richiesta secondo cui tutte le funzioni che chiamano funzioni con l'attributo consteval diventano anch'esse consteval, ovvero vengono eseguite durante la compilazione. Sono state allentate alcune restrizioni relative a «constexpr».
  • Sono state aggiunte funzionalità relative al futuro standard C++2c (C++26). Ad esempio, è ora possibile utilizzare stringhe letterali in contesti in cui non vengono utilizzate per l'inizializzazione di un array di caratteri, non vengono incluse nel codice risultante e vengono usate solo durante la compilazione per messaggi diagnostici e preprocessamento. È stata aggiunta la possibilità di utilizzare più variabili segnaposto con il nome «_» nello stesso ambito. È stata dichiarata obsoleta l'esecuzione di conversioni implicite di valori enumerati in operazioni aritmetiche.
  • In libstdc++ è stato migliorato il supporto per gli standard C++20, C++23 e C++26.
  • Nel compilatore per il linguaggio Fortran è iniziato il lavoro sul supporto dello standard Fortran 2023 (-std=f2023).
  • È stata dichiarata obsoleta la supporto all'estensione GCC che consente di specificare un membro array flessibile (array di dimensione indefinita, ad esempio, «int b[]») non alla fine della struttura (Flexible Array Members). Un array di dimensione indefinita potrà essere utilizzato solo alla fine della struttura.
  • Nel backend per l'architettura AArch64 è stata implementata la supporto per CPU Ampere-1B (ampere1b), Arm Cortex-A520 (cortex-a520), Arm Cortex-A720 (cortex-a720), Arm Cortex-X4 (cortex-x4) e Microsoft Cobalt-100 (cobalt-100). Sono stati aggiunti nuovi identificatori CPU generic, generic-armv8-a e generic-armv9-a per l'uso nelle opzioni «-mcpu=» e «-mtune=». È stata aggiunta la supporto per le estensioni Arm SME e SME2 (Streaming Matrix Extensions). Sono state implementate ottimizzazioni specifiche per l'architettura AArch64.
  • Nel backend per l'architettura ARM è stata aggiunta la supporto per CPU Cortex-M52 (cortex-m52 nelle opzioni «-mcpu=» e «-mtune=»).
  • Nel backend di generazione codice per GPU AMD Radeon (GCN) è stata implementata la supporto per GPU AMD Radeon gfx90c (GCN5), gfx1030, gfx1036 (RDNA2), gfx1100 e gfx1103 (RDNA3). È stata migliorata la performance per i dispositivi AMD delle serie MI100 e MI200. Per impostazione predefinita, è attivata l'architettura dei dispositivi gfx900 (Vega).
  • Nel backend per l'architettura x86 è stata aggiunta la supporto per le estensioni dell'architettura del set di istruzioni Intel AVX10.1, Intel APX (parzialmente), Intel AVX-VNNI-INT16, Intel SHA512, Intel SM3, Intel SM4, Intel USER_MSR.

    È stata aggiunta la compatibilità con le CPU AMD basate sul core Zen 5 (-march=znver5), così come i processori Intel Clearwater Forest (-march=clearwaterforest), Arrow Lake (-march=arrowlake), Arrow Lake S (-march=arrowlake-s), Lunar Lake (-march=lunarlake) e Panther Lake (-march=pantherlake). È stata aggiunta l'opzione «-m[no-]evex512» per controllare l'uso dei vettori a 512 bit (abilitato di default se è presente il supporto AVX512F). Il supporto per le CPU Intel Xeon Phi è stato dichiarato obsoleto.

  • Sono state ampliate le funzionalità dei backend per le piattaforme LoongArch, AVR e RISC-V.
  • Le funzionalità di output diagnostico sono state ampliate per il formato SARIF, basato su JSON. Il formato SARIF può essere utilizzato per ottenere i risultati dell'analisi statica (GCC -fanalyzer), oltre a fornire informazioni su avvisi ed errori.
  • Il supporto per le architetture target ia64 e nios2, utilizzate nei processori Intel Itanium e Nios II, è stato declassato e sarà rimosso nella prossima versione di GCC.

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster