Clang passe en version 6.0

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