- 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