Comme tous les six mois, voici une nouvelle version de LLVM, l’infrastructure de compilateur, notamment utilisée par Clang. Elle est numérotée 4.0, suite aux changements effectués dans les conventions du projet : auparavant, les versions successives étaient obtenues en ajoutant 0.1 (par exemple, la 3.9 a succédé à la 3.8) ; désormais, elles le seront par incrément de 1.0 (dans six mois sortira LLVM 5.0). En effet, le projet LLVM cherche à sortir une version tous les six mois, peu importe les fonctionnalités qui y ont trouvé leur place (et, pour les utilisateurs de l’API interne de LLVM et Clang, passer d’une version à l’autre pose presque toujours des problèmes). Certes, les versions 2.0 et 3.0 coïncidaient avec des changements majeurs qui cassaient la rétrocompatibilité de manière marquée, mais ce n’était pas tellement voulu (ces versions suivaient les 1.9 et 2.9, respectivement).

En quelques mots, LLVM 4.0 peut utiliser les informations de profilage avec ThinLTO (optimisation lors de l’édition des liens). Son élimination du code mort agressive supprime plus de code. Les coroutines sont arrivées dans le langage intermédiaire (LLVM IR) mais restent expérimentales (plus d’informations données lors du Developpers’ Meeting). LLVM 4.0 peut produire des binaires pour la plateforme Atmel AVR (après un développement sur GitHub, le code est intégré dans LLVM). L’éditeur de liens LLD a vu sa performance largement améliorée. Deux nouvelles conventions de passage d’arguments et de valeur de retour des fonctions ont été implémentées ; elles ont pour objectif de limiter le nombre d’éléments qui sortent des registres.

Côté C++, de nouvelles fonctionnalités du prochain standard (probablement numéroté C++17, mais dénommé C++1z pour le moment) sont intégrées à Clang. L’attribut diagnose_if peut être utilisé pour afficher des messages à l’utilisateur sous condition. De nouvelles optimisations par dévirtualisation des appels de méthode virtuelle ont été implémentées et peuvent être activées séparément. La gestion d’OpenCL a vu bon nombre de défauts corrigés.