Developpez.com - Rubrique C++

Le Club des Développeurs et IT Pro

Le compilateur C++ clang passe en version 10

Et officialise le support des concepts du C++20

Le 2020-03-28 23:04:36, par LittleWhite, Responsable 2D/3D/Jeux
Le compilateur C, C++ et Objective C open source Clang est maintenant disponible en version 10.0.0 (ainsi que l'infrastructure LLVM dans laquelle Clang est un frontend). L'un des grands ajouts de cette version est le support des concepts, nouveauté du C++20. Vous pourrez l'activer grâce à l'option -std=c++2a. L'ancienne option -fconcepts-ts a été dépréciée. Évidemment, ce n'est pas le seul changement. Voici un résumé :

  • la compilation se fait maintenant dans le même processus que le processus lançant la compilation. L'ancien comportement (un sous-processus séparé) peut être rétabli avec l'option -fno-integrated-cc1 ;
  • le diagnostic des sources a été amélioré :
    • -Wtautological-overlap-compare ajoute un avertissement sur les nombres négatifs et types non entiers,
    • -Wbitwise-conditional-parentheses ajoute un avertissement sur la précédence lorsque les opérateurs bit à bit & et | sont combinés avec l'opérateur ternaire ?:,
    • ajout d'un avertissement sur l'indentation trompeuse qui pourrait induire une mauvaise lecture du code (indentation d'un code, alors qu'il ne se trouve pas dans un bloc) (-Wmisleading-indentation) (c'est une reprise de l'avertissement déjà présent dans GCC),
    • désactivation de -Wbitwise-op-parentheses et -Wlogical-op-parentheses par défaut,
    • ajout d'un avertissement d'utilisation d'un mauvais type lors d'une division reposant sur sizeof() (par exemple, pour trouver la taille d'un tableau statique) (-Wsizeof-array-div) ;
  • ajout de vérification sur le déroulement du programme (Control Flow Guard) spécifique à Windows ;
  • respect de l'élision de copie du C++17 ;
  • correction des listes d'initialisations ;
  • correction de l'opérateur virgule , ;
  • ajout d'une option -fgnuc-version= pour contrôler la valeur des macros __GNUC__ ;
  • ajout de l'attribut __attribute__((target("branch-protection=..."))) ;
  • le comportement de gnu_inline est calé sur celui-ci de GCC lors d'une utilisation sans le mot-clé extern ;
  • amélioration de l'analyseur statique et du sanitizer de comportement indéfini (UBSan) ;
  • amélioration du support des noyaux OpenCL ;
  • ajout de fonctionnalités et amélioration du support d'OpenMP 5 (activable avec l'option -fopenmp-version=50.


La liste complète des changements de Clang est disponible dans les notes de publication. Aussi, vous pouvez découvrir les changements globaux à LLVM dans cette page dédiée.

Votre opinion

Que pensez-vous de Clang ? L'utilisez-vous dans vos projets ? Pourquoi ?

Source

Notes de publication
  Discussion forum
1 commentaire
  • Oxyale
    Membre confirmé
    Ce compilateur est devenu très bon. Je l'utilise en priorité pour les premières erreurs de build afin de mieux cerner mes problèmes.

    Il m'aide avec gcc 10.1 à trouver et à mieux optimiser mes quelques programmes personnels (ex alignement mémoire -> défaut de page).

    Concernant les builds finaux j'utilise gcc car il compile encore mieux mais cela se tient à un cheveu parfois et puis je fais des test régulièrement et c'est incroyable que le projet LLVM ait réussi à en arriver la.

    Je pense que ce projet à vraiment bousculé gcc : comme quoi un peu de concurrence à vraiment aider ce projet à avancer et à rester dans l'air du temps.

    Pour cela j'utilise ce package pour windows : http://winlibs.com/
    Il est régulièrement mis à jour et très simple tout est fusionné dans le répertoire /bin ce qui aide grandement à switcher de l'un à l'autre une fois l'IDE configuré avec des profils de compilateur.
    Je précise qu'il y a les versions 32 bits et 64 bits.
    Et surprise : la version 10 de chacun de ces compilateurs y sont!

    Il manque des outils à la Intel Compiler Studio et ces compilateurs seront encore plus proche de la perfection!!!

    En tout cas : chapeau à eux!