URL: https://linuxfr.org/users/serge_ss_paille/journaux/llvm-11-0-0 Title: LLVM 11.0.0 Authors: serge_sans_paille Date: 2020年10月13日T11:28:20+02:00 License: CC By-SA Tags: clang, fortran et llvm Score: 34 Demat'iNal, Après [6 *release candidates*](https://prereleases.llvm.org/11.0.0/), la version [11.0.0](https://releases.llvm.org/download.html#11.0.0) de l'écosystème LLVM a finalement été rendue publique. LLVM suit un cycle de sortie de 6 mois, quelles sont donc les grandes nouveautés ? On notera déjà l'arrivée du compilateur [Flang](https://releases.llvm.org/11.0.0/tools/flang/docs/index.html) dans la suite officielle LLVM, qui se dote ainsi d'un compilateur Fortran. Il vient remplacer le peu usité `llvmgo` qui a été retiré du dépôt officiel. # LLVM [release note](https://releases.llvm.org/11.0.0/docs/ReleaseNotes.html) # LLVM possédait déjà un type vectoriel, p.e. `` pour un vecteur de 4 entiers 32 bits. Ce type de taille fixe est maintenant complété par un type vectoriel de taille variable, noté `` pour un vecteur de 4, 8, 12 etc entiers de 32 bits, pour pouvoir cibler des jeux d'instruction comme [SVE](https://developer.arm.com/documentation/100891/latest/sve-overview/introducing-sve) de ARM. Plusieurs ajustements ont été faits pour la gestion propagation des valeurs [poison](http://llvm.org/docs/LangRef.html#poison-values) et [undef](http://llvm.org/docs/LangRef.html#undefvalues). Le lecteur intéressé se délectera de cette [video du LLVM Virtual Developer Meeting](https://youtu.be/_APJ4PtF0sk) sur la différence entre *undef* et *poison*. Il est maintenant possible de positionner l'attribut `probe-stack` à `"inline-asm"` ce qui fournit, sur les architectures x86 (implémenté par votre serviteur), SystemZ et PowerPC, une protection contre l'attaque [stack clash](https://blog.qualys.com/vulnerabilities-research/2017/06/19/the-stack-clash) # Clang [release note](https://releases.llvm.org/11.0.0/tools/clang/docs/ReleaseNotes.html) # Clang est maintenant doté d'un *recoverable AST*, qui permet de mieux gérer la représentation des erreurs; En cas d'erreur de syntaxe, le code suivant l'erreur est plus facilement parsé dans de bonnes conditions. Cette fonctionnalité est activée par défaut pour le *front-end* C++. De nouveaux avertissements voient le jour : `-Wpointer-to-int-cast`, `Wuninitialized-const-reference` et `-Wimplicit-const-int-float-conversion`. Leur dénommination me parait suffisament explicite ;-) Clang fournit désormais des types intrinsèques, `_ExtInt(N)` où `N` est un entier spécifiant la taille du type entier. Cela permet de déclarer des entiers de 57 bits. Les projets reposant sur une génération *a priori* des profiles utilisés par les options de *Profile Guided Optimization* devront regénérer leurs profiles, l'algorithme de *hash* utilisé ayant reçu un correctif de bug par votre serviteur. L'option `-O` est dorénavant un alias de `-O1` et non plus `-O2`. En spécifiant `-fpic/-fPIC -fno-semantic-interposition ` la sémantique d'interposition requise par ELF n'est plus respectée, pour le plus grand plaisir des optimisations. L'option `-fstack-clash-protection` permet de tirer parti des protéctions contre *stack clash* implémentée au niveau LLVM. Plusieurs options relatives à la gestion des nombres flottants: `-ffp-exception-behavior={ignore,maytrap,strict}` et `-ffp-model={precise,strict,fast}`. D'un point de vue langage, le support d'OpenMP5 a été amélioré, la version du standard C utilisée par défaut est gnu17, la *defect report* [P1766R1](http://wg21.link/p1766r1) qui restreint l'usage de structure anonymes dans un typedef, *à la C*, est appliquée de manière rétroactive à toutes les version de C++ # Others # la suite de compilation LLVM inclut également des [outils basés sur clang](https://releases.llvm.org/11.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html), un éditeur de lien, [lld](https://releases.llvm.org/11.0.0/tools/lld/docs/ReleaseNotes.html), une implémentation de la bibliothèque standard C++, [libc++](https://releases.llvm.org/11.0.0/projects/libcxx/docs/ReleaseNotes.html), un optimiseur polyhèdrique [polly](https://releases.llvm.org/11.0.0/tools/polly/docs/ReleaseNotes.html), et, pour ceux qui ont suivi, un compilateur Fortran [flang](https://releases.llvm.org/11.0.0/tools/flang/docs/ReleaseNotes.html). En vrac, Flang supporte Fortran2018, [`` ](https://en.cppreference.com/w/cpp/header/numbers) fait son arrivée dans la libc++, pas mal de travail niveau performance et de nouveaux diagnostiques dans `clangd` et plein d'autres choses que je ne comprends pas bien ;-) Je vous invite à lire leur notes si ces sujets vous intéresse !

AltStyle によって変換されたページ (->オリジナル) /