IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

GCC 11.1 est publié avec des fonctionnalités expérimentales du C++ 23
Et le support d'un certain nombre de processeurs Intel, AMD et Arm récents et à venir

Le , par Bill Fassinou

287PARTAGES

10  0 
Les développeurs de GCC ont annoncé mardi la disponibilité d'une nouvelle version majeure de la collection de compilateurs, GCC 11.1. Cette version change le format de débogage par défaut en DWARF 5 sur la plupart des cibles et change la version du langage C++ par défaut en -std=gnu++17. Elle fait de grands progrès dans le support du langage C++ 20, à la fois du côté du compilateur et de la bibliothèque, ajoute le support expérimental de C++ 23, quelques améliorations C2X, diverses améliorations d'optimisation et corrections de bogues, des améliorations aux back-ends du compilateur et beaucoup d'autres changements.



Améliorations générales

Linux Kernel Concurrency Sanitizer (KCSAN)

L'équipe a apporté des améliorations à ThreadSanitizer pour supporter des environnements et des runtimes alternatifs. Le KCSAN est maintenant supporté :

  • ajout de --param tsan-distinguish-volatile pour émettre optionnellement une instrumentation distinguant les accès volatiles ;
  • ajout de --param tsan-instrument-func-entry-exit pour contrôler optionnellement si les entrées et sorties de fonctions doivent être instrumentées.

Les numéros de colonne

Selon l'équipe, dans les versions précédentes de GCC, les "numéros de colonne" émis dans les diagnostics étaient en fait un compte d'octets depuis le début de la ligne source. Cela pouvait être problématique, à la fois à cause :

  • des caractères multioctets (nécessitant plus d'un octet pour être encodés), et
  • des caractères multicolonnes (nécessitant plus d'une colonne pour être affichés dans une police monospace).

Par exemple, le caractère π ("GREEK SMALL LETTER PI (U+03C0)" occupe une colonne, et son encodage UTF-8 nécessite deux octets ; le caractère �� ("SLIGHTLY SMILING FACE (U+1F642)" occupe deux colonnes, et son encodage UTF-8 nécessite quatre octets. Dans GCC 11, les numéros de colonnes deviennent par défaut des numéros de colonnes respectant les caractères multicolonnes. L'ancien comportement peut être restauré en utilisant une nouvelle option -fdiagnostics-column-unit=byte.

Il y a aussi une nouvelle option -fdiagnostics-column-origin= qui permet de remplacer le défaut préexistant de la colonne de gauche par la colonne 1 si on le souhaite (par exemple, pour les colonnes basées sur 0). La sortie de -fdiagnostics-format=json a été étendue pour fournir à la fois le nombre d'octets et les numéros de colonne pour tous les emplacements de source.

De plus, dans les versions précédentes de GCC, les caractères de tabulation dans la source étaient émis textuellement lors de la citation du code source, mais étaient préfixés avec des informations d'espacement ou de numéro de ligne, ce qui entraînait des désalignements dans la sortie résultante par rapport aux sources réelles. Les caractères de tabulation sont maintenant imprimés avec un nombre approprié d'espaces, en utilisant l'option -ftabstop (qui propose par défaut 8 espaces par arrêt de tabulation).

Hardware-assisted AddressSanitizer

Cette version du compilateur introduit le support de Hardware-assisted AddressSanitizer. Cet assainisseur ne fonctionne actuellement que pour la cible AArch64. Il aide à déboguer les problèmes d'adresse de manière similaire à AddressSanitizer, mais est basé sur une assistance matérielle partielle et fournit une protection probabiliste pour utiliser moins de RAM au moment de l'exécution. Hardware-assisted AddressSanitizer n'est pas prêt à être utilisé en production pour l'espace utilisateur, et est fourni principalement pour la compilation du noyau Linux. Pour utiliser cet assainisseur, les arguments de la ligne de commande sont :

  • -fsanitize=hwaddress pour instrumenter le code de l'espace utilisateur ;
  • -fsanitize=kernel-hwaddress pour instrumenter le code du noyau.

Informations de débogage DWARF

L'équipe a annoncé que, pour les cibles qui produisent des informations de débogage DWARF, GCC utilise maintenant par défaut la version 5 de DWARF (à l'exception de VxWorks et Darwin/Mac OS X qui utilisent par défaut la version 2 et AIX qui utilise par défaut la version 4). Cela peut produire des informations de débogage jusqu'à 25 % plus compactes par rapport aux versions précédentes. Pour profiter pleinement de la version 5 de DWARF, GCC doit être compilé avec binutils version 2.35.2 ou supérieure.

Lorsque GCC est compilé avec des versions antérieures de binutils, GCC émettra toujours la version 5 de DWARF pour la plupart des données de débogage, mais générera les tables de lignes de débogage de la version 4 (même si on lui a explicitement donné -gdwarf-5). Les consommateurs d'informations de débogage suivants peuvent traiter DWARF version 5 :

  • GDB 8.0, ou plus ;
  • valgrind 3.17.0 ;
  • elfutils 0.172, ou supérieur (pour une utilisation avec systemtap, dwarves/pahole, perf et libabigail) ;
  • dwz 0.14.

Nouvelles options de ligne de commande

  • -fbit-tests, activé par défaut, peut être utilisé pour activer ou désactiver l'expansion des commutateurs en utilisant des tests de bits.

Améliorations de l'optimisation du temps de liaison

  • le format du bytecode LTO a été optimisé pour des fichiers objet plus petits et un streaming plus rapide ;
  • l'allocation de mémoire de l'étape de liaison a été améliorée pour réduire les pics d'utilisation de la mémoire.

Améliorations de l'optimisation par profil

  • l'utilisation de -fprofile-values a été améliorée en suivant plus de valeurs cibles pour les appels indirects, par exemple ;
  • le format de fichier de données GCOV produit des fichiers plus petits en représentant les compteurs zéro d'une manière plus compacte.

Nouveaux langages et améliorations spécifiques aux langages

  • GCC 11 ajoute la prise en charge des nids de boucles non rectangulaires dans les constructions OpenMP et les routines d'allocation d'OpenMP 5.0, y compris la prise en charge de la clause d'allocation initiale en C/C++. La variable d'environnement OMP_TARGET_OFFLOAD et les routines active-levels sont maintenant supportées ;
  • pour C/C++, le support de declare variant et map a été étendu ;
  • pour Fortran, OpenMP 4.5 est maintenant entièrement supporté et le support d'OpenMP 5.0 a été étendu, incluant les fonctionnalités suivantes qui étaient auparavant uniquement disponibles en C et C++ : order(concurrent), device_type, memorder-clauses pour flush, lastprivate avec modificateur conditionnel, etc. ;
  • la version 2.6 de la spécification OpenACC continue d'être maintenue et améliorée dans les compilateurs C, C++ et Fortran.

Famille C

Nouveaux attributs

  • l'attribut no_stack_protector a été ajouté pour marquer les fonctions qui ne doivent pas être instrumentées avec une protection de la pile (-fstack-protector).
  • l'attribut malloc existant a été étendu afin de pouvoir être utilisé pour identifier les paires d'API allocateur/désallocateur.

Nouveaux avertissements

  • Wmismatched-dealloc, activé par défaut, avertit des appels aux fonctions de désallocation avec des pointeurs retournés par des fonctions d'allocation non concordantes ;
  • Wsizeof-array-div, activé par -Wall, prévient des divisions de deux opérateurs sizeof lorsque le premier est appliqué à un tableau et que le diviseur n'est pas égal à la taille de l'élément du tableau ;
  • Wstringop-overread, activé par défaut, prévient des appels aux fonctions de chaîne de caractères lisant au-delà de la fin des tableaux qui leur sont passés comme arguments. Dans les versions précédentes de GCC, la plupart des cas de cet avertissement sont diagnostiqués par -Wstringop-overflow ;
  • Wtsan, activé par défaut, prévient des fonctionnalités non supportées dans ThreadSanitizer (actuellement std::atomic_thread_fence).

Améliorations aux avertissements existants...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !