Livrée le 7 mai dernier, cette version 10.1 majeure du GCC (GNU Compiler Collection) bénéficie de plusieurs améliorations dans la prise en charge du langage C++ 20 et dans le support C2X, la prochaine révision majeure du langage C, prévue pour 2022. D’après les notes de version de GCC 10, une multitude de fonctionnalités C++ 20 ont été implementées, comme l'assemblage en ligne dans les fonctions contextuelles constexpr Functions et l’extension des liaisons structurées. Toujours à propos du C++ 20, GCC 10 permet les conversions en tableaux de liaisons inconnues, l'initialisation triviale par défaut dans les contextes constexpr, l’ajout du mot-clé constinit, le mot-clé volatile étant déprécié.

Concernant C2X, la prochaine révision de l’ISO C standard, plusieurs fonctionnalités sont prises en charge avec la syntaxe -std=c2x et -std+gnu2x. Parmi celles-ci, la vérification du format strftime prenant en charge les formats %OB et %Ob et les constantes de caractères UTF-8 utilisant la syntaxe u8' '.

GNU Compiler Collection, qui existe depuis plus de 33 ans, comprend des frontaux et des bibliothèques pour C, C++, Fortran, Ada, Go et D. Un avis a été publié sur le portage vers GCC 10.

Parmi les autres nouvelles fonctionnalités de GCC 10.1 ont peut citer :

- L’ajout de fonctions intégrées : notamment l’opérateur de préprocesseur has_builtin peut être utilisé pour interroger le support des fonctions intégrées fournies par GCC et d'autres compilateurs qui le prennent en charge.

- L’ajout d’options de ligne commande : c’est le cas de -fallocation-dce, qui supprime les paires inutiles de nouveaux opérateurs et d'opérateurs de suppression, et -fanalyzer, qui active une nouvelle passe d'analyse statique et les avertissements associés. Cette dernière option doit être considérée comme expérimentale.

- Des améliorations ont été apportées à l'optimisation inter-procédurale. Notamment, la réimplémentation de la passe inter-procédurale de remplacement scalaire d’agrégats (IPA-SRA) pour fonctionner au temps de liaison. L'IPA-SRA peut désormais aussi supprimer le calcul et renvoyer les valeurs de retour non utilisées.

- D’autres améliorations ont été apportées à l'optimisation du temps de liaison, comme l’ajout d’un nouveau lto-dump binaire. Le programme peut exporter diverses informations sur un fichier objet d'octets LTO.

- Des améliorations ont été apportées à l'optimisation par profil, notamment l'amélioration de la maintenance des profils pendant la compilation et le partitionnement chaud/froid.

- Pour la famille C, la fonction access et l'attribut type ont été ajoutés pour décrire comment une fonction accède aux objets qui lui sont passés par un pointeur ou une référence, et pour associer ces arguments à des arguments entiers indiquant la taille de l'objet. L'attribut est utilisé pour permettre la détection des accès non-valides par les fonctions définies par l'utilisateur. Il existe également de nouveaux avertissements et des améliorations aux avertissements existants. Un avertissement -Wzero-length-bounds alerte en cas d'accès à des éléments de tableaux de longueur nulle qui pourraient chevaucher d'autres membres du même objet.

- Une incompatibilité ABI entre C++ 14 et C++ 17 a été corrigée. Sur certaines cibles, une classe avec un sous-objet de taille zéro serait incorrectement transmise lors de la compilation en C++ 17 ou C++ 20.