Le compilateur Clang pour les langages C, C++ et Objective-C sort en version 6.0
Avec une protection contre la faille Spectre et d'autres correctifs

Le , par LittleWhite, Responsable 2D/3D/Jeux
Le frontend C/C++ et Objective C de l'infrastructure LLVM, clang, sort en version 6.0.0 avec le reste du projet. Voici, une liste (non exhaustive) des changements apportés par cette nouvelle version :
  • support de retpoline (pour éviter les attaques Spectre, variante 2) (avec ajout des options -mretpoline pour activer la protection et -mretpoline-external-chunk pour permettre à l'utilisateur de définir le thunk à utiliser) ;
  • ajout des avertissements :
    • -Wpragma-pack pour avertir de l'absence de fin de directive #pragma pack ou lorsque le compilateur quitte un fichier d'inclusion qui a changé l'alignement,
    • -Wpragma-pack-suspicious-include (désactivé par défaut) pour avertir qu'une structure ou une union est affectée par un alignement autre que celui par défaut,
    • -Wtautological-compare et -Wtautological-constant-compare pour avertir des soucis avec les comparaisons entre nombres signés ou non et zéro ou entre un nom et sa limite,
    • -Wnull-pointer-arithmetic donne des avertissements pour des opérations arithmétiques effectuées sur un pointeur NULL,
    • -Wdelete-non-virtual-dtor surveille aussi les destructions dans les entêtes systèmes et se déclenche pour indiquer la présence d'un destructeur non virtuel, permettant ainsi de se déclencher dans le destructeur d'un std::unique_ptr,
    • -Wunreachable-code intègre __try, __except et __leave ;

  • ajout du support des fichiers de configuration (les options proviennent d'un fichier, comme s'ils provenaient de la ligne de commande) ;
  • ajout des options -fdouble-square-bracket-attributes et -fno-double-square-bracket-attributes pour activer ou désactiver le support des attributs ;
  • ajout des options -std=c17, -std=gnu17 et -std=iso9899:2017 pour être compatible avec les options GCC. Ces options activent évidemment le support du C++17 ;
  • ajout de l'option -nostdlib++ pour ne pas lier la bibliothèque standard C++ ;
  • ajout de la macro __has_c_attribute() pour savoir si un attribut est géré en mode C ;
  • le langage C++ par défaut est maintenant C++14 (option gnu++14) et non plus gnu++98 ;
  • ajout du support de fonctionnalités prévues du C++20 :
    • support de __VA_OPT__ pour permettre aux macros d'avoir différentes expansions lorsqu'elles sont invoquées sans argument variable,
    • support de l'opérateur <=>,
    • support de l’initialisation par défaut des membres des champs de bits,
    • capture de *this pour les lambdas,
    • support des pointeurs vers les membres pour les pointeurs qualifiés de const & sur les objets temporaires.



En plus, vous pouvez trouver des améliorations dans clang-format, l'analyseur statique et le nettoyeur de comportement indéterminé (UBSan). Pour ces raisons (et plein d'autres), il est toujours bon de mettre à jour ses logiciels de compilations.

Votre opinion

Utilisez-vous clang ? Quel en est votre usage ?

Source

Notes de publication


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de yvslms yvslms - Membre actif https://www.developpez.com
le 12/03/2018 à 13:21
Utilisez-vous clang ? Quel en est votre usage ?

Oui - avec C++ Builder (Embarcadero) pour le développement d'applis mobiles Android et iOS.
Avatar de Matthieu Brucher Matthieu Brucher - Rédacteur https://www.developpez.com
le 12/03/2018 à 18:02
delete-non-virtual-dtor etait deja dispo en 5.0.0.
Apres, je suis bien content de cette nouvelle version, mais la doc reste toujours aussi mauvaise. Meme les release notes datent.
Avatar de LittleWhite LittleWhite - Responsable 2D/3D/Jeux https://www.developpez.com
le 12/03/2018 à 18:57
Pour le destructeur virtuelle, c'est une mise à jour du comportement de l'avertissement. J'ose croire qu'en 5.0, il ne vérifiait pas les include systèmes alors que maintenant, c'est le cas et ça permet de vérifier ce cas au travers de l'utilisation d'une classe dans les unique_ptr (par exemple).
Contacter le responsable de la rubrique C++