Le 3 mai, la première version publique de la neuvième version de GCC a été publiée : GCC 9.1.
Elle contient de nombreuses améliorations et ajouts par rapport à la version huit.
version.
Modifications générales
Options
- Les commandes prenant une taille prennent désormais en charge des valeurs 64 bits et des suffixes pour indiquer la taille ;
- Une option ajoutée -flive-patching, pour contrôler les optimisations potentiellement destructrices pour le remplacement de code dynamique ;
- Une option -completion a été ajoutée pour prendre en charge l'auto-complétion dans l'interface de commande ;
- Les diagnostics du compilateur incluent désormais les numéros de ligne (-fno-diagnostics-show-line-numbersDeep Speech
des informations sur les types (-fno-diagnostics-show-labels); - Une option ajoutée -fdiagnostics-format=json pour afficher les diagnostics au format JSON ;
- Options pour spécifier l'alignement (-falign-functions, par exemple) peuvent désormais accepter une paire d'options d'alignement ;
- Des options ont été ajoutées pour filtrer la liste des fichiers (-fprofile-filter-files, -fprofile-exclude-files), qui sont soumis à un instrumentation pour le profileur ;
- AddressSanitizer utilise maintenant un alignement plus compact pour attraper les accès incorrects aux variables sur la pile ;
- De nombreuses améliorations dans l'output -fopt-info;
- Une option ajoutée -fsave-optimization-record pour sauvegarder le rapport d'optimisation dans un fichier ;
- Une option ajoutée -fipa-stack-alignment et -fipa-reference-addressable.
Nouvelles fonctions intégrées
Un nouvel attribut
- copy.
Autre
De nombreuses améliorations de génération de code liées à :
- la génération de constructions switch ;
- les optimisations interprocédurales ;
- les optimisations basées sur les informations de profiling ;
- l'optimisation à la phase de linking (LTO) ;
Le format interne de gcov est désormais JSON, et la nouvelle option —use-hotness-colors active la coloration des lignes de code en fonction de leur fréquence d'utilisation.
Langages
Qualité et exhaustivité de l'implémentation OpenACC dans les langages C, C++, et Fortran continue de s'améliorer.
Langages de type C
- Un support partiel de OpenMP 5.0 a été réalisé ;
- Une fonction a été ajoutée __builtin_convertvector;
- Un avertissement a été ajouté -Waddress-of-packed-member;
- Améliorations dans un certain nombre d'avertissements existants ;
- Le message d'erreur pour une mauvaise quantité d'arguments passés dans un macro inclut désormais la déclaration du macro lui-même ;
- Améliorations dans les suggestions de correction des fautes de frappe.
C
- Support de _Static_assert avec un argument pour -std=c2x (le futur standard C) ;
- Un nouvel avertissement -Wabsolute-value, qui attrape un type d'argument incorrect pour des fonctions comme abs().
C++
- Nouveaux avertissements : -Wdeprecated-copy,
-Winit-list-lifetime,
-Wredundant-move,
-Wpessimizing-move,
-Wclass-conversion; - Le travail est en cours pour mettre en œuvre de nouvelles fonctionnalités du futur standard C++ 2a;
- Le frontend conserve désormais des informations plus précises sur un certain nombre d'éléments du code source, ce qui permet d'afficher des informations plus détaillées dans les diagnostics ;
- Les diagnostics pour les fonctions surchargées, les opérateurs binaires, les appels de fonctions et les chaînes de format ont été améliorés ;
- Des corrections automatiques prises en charge par certains environnements de développement ont été ajoutées pour un certain nombre d'erreurs populaires (parenthèses manquantes, espaces de noms, fautes de frappe, etc.).
libstdc++
- La mise en œuvre de C++17 n'est plus expérimentale ;
- Des algorithmes parallèles, <execution>, <memory_resource>, ont été ajoutés, et <filesystem> ne nécessite plus -lstdc++fs ;
- Le support expérimental de C++ 2a (<bit>, <version>, std::bind_front, etc.) a été amélioré ;
- Support de l'ouverture de fichiers sur Windows dont les chemins contiennent des caractères en dehors de char ;
- Support initial de <filesystem> sur Windows ;
- Support initial de Networking TS.
D
Le langage D version 2.076 est intégré dans GCC.
Fortran
- Support complet des entrées/sorties asynchrones ;
- L'argument BACK a été mis en œuvre pour MINLOC et MAXLOC ;
- Les fonctions FINDLOC et IS_CONTIGUOUS ont été mises en œuvre ;
- La syntaxe d'accès aux parties composites des nombres complexes a été mise en œuvre : c%re et c%im ;
- La syntaxe str%len et a%kind a été mise en œuvre ;
- Des descripteurs C et le fichier d'en-tête ISO_Fortran_binding.h ont été mis en œuvre ;
- Les exigences concernant le résultat des fonctions MAX et MIN ont été assouplies lorsqu'un des arguments est NaN ;
- Une option ajoutée -fdec-include;
- Directive ajoutée BUILTIN.
libgccjit
- Une fonction a été ajoutée gcc_jit_context_add_driver_option.
Autre
Un grand nombre de modifications spécifiques à l'architecture et au système d'exploitation.
Source : linux.org.ru

