Après cinq versions candidates, l’étiquette finale a été apposée sur la branche 8.0.0 de la famille LLVM.
Cette dépêche reprend les points importants des notes de sortie associées. C’est une sélection totalement biaisée, libre à vous de lire les journaux des modifications respectifs pour avoir tous les détails !
LLVM
- possibilité (sous x86) de fournir un profil d’accès mémoire afin de limiter le nombre de défauts de cache [RFC] ;
- le back‐end Webassembly gagne le statut stable !
- les personnes développant des extensions LLVM doivent maintenant utiliser
add_llvm_library
au lieu deadd_llvm_loadable_module
pour enregistrer leurs extensions.
Clang
- possibilité de fournir un fichier de renommage pour utiliser les informations de profilage d’une version A d’un binaire pour recompiler une version B [doc] ;
- possibilité de forcer la valeur des variables déclarées sur la pile ou en mises en registre, au lieu de les laisser non initialisées, en utilisant
-ftrivial-auto-var-init=pattern
; - quelques warnings de plus :
-
-Wextra-semi-stmt
pour détecter les points virgules inutiles, mais en ignorant certains cas liés à l’expansion de macros, -
-Wempty-init-stmt
détecte les initialisations vides dans le contexte de conditions/boucles (c’est du C++17, [spec]) ;
-
- ajout du builtin
__builtin_rotateleft32
; - introduction de
-mspeculative-load-hardening
pour se prémunir de la famille de failles dite Spectre [rtd] ; - OpenMP 5 mieux géré, et pas mal d’améliorations du côté d’OpenCL ;
- l’undefined behavior sanitizer, déclenché par
-fsanitize=undefined
, a gagné plusieurs extensions, dont une qui vérifie les contraintes d’alignement ; - clang-format voit sa gestion des reformatages de macros améliorée.
Extra Clang Tools
clangd
clangd
est un démon qui fournit un service de type complétion, etc., à ces clients.
- meilleure intégration avec le Language Server Protocol ;
- plusieurs optimisations (taille et vitesse) pour la gestion des grosses bases de code.
clang-tidy
clang-tidy
est un outil de vérification de code.
- un bon paquet de tests pour l’utilisation de la bibliothèque abseil ;
- un autre paquet de tests pour la modernisation de code (p. ex. : remplacement de tableaux à taille fixe par des
std::array
) ; - quelques tests autour des CppCoreGuidelines.
lld
- choix de l’adresse de chargement des binaires comme un multiple d’une superpage, pour améliorer la vitesse de chargement dans les cas où le système cible prend en charge les *superpage*s — si comme moi tu ne sais pas ce qu’est une super‐page, clic clic ;
- autre choix assez amusant : la section
.note
qui contient de précieuses informations (comme le build-id) est maintenant placée en début de fichier pour être présente dans les core files, même s’ils sont tronqués ; - des améliorations pour le format COFF et pour l’environnement MinGW, où l’on voit que Windows n’est pas une plate‐forme laissée de côté par LLD.
lldb
- coloration syntaxique (pour C) et complétion de code.
Notes de fin
Cette version de LLVM est la dernière compilable avec GCC 4.8, les versions minimales requises augmentent, pour les raisons évoquées dans ce fil de discussion.
Et c’est aussi probablement la dernière version sous Subversion, le choix a été fait de passer à un dépôt unique (a.k.a. monorepo) sous Git. Pas mal de doc à ce sujet ici, là ou encore dans ce coin.
Aller plus loin
- Page de téléchargement (113 clics)
- L’infrastructure de compilation (35 clics)
- Le compilateur C, C++ et ObjC (39 clics)
- L’éditeur de liens (23 clics)
- Le débogueur (28 clics)
- Les bibliothèques libc++ et libc++abi (35 clics)
# Flang
Posté par vmagnin (site web personnel) . Évalué à 10.
Bonjour,
si j'ai bien compris LLVM est une infrastructure pour construire des compilateurs et Clang le compilateur C correspondant. En ce moment, je commence à m'intéresser au compilateur Fortran Flang qui utilise LLVM (même si je n'ai pas réussi à l'installer pour l'instant avec le gestionnaire de paquets Spack dont ils parlent sur leur site).
J'utilise depuis des années gfortran qui fait partie de GCC et j'en suis très content. Mais c'est toujours intéressant de compiler un code sur plusieurs compilateurs, ça permet parfois de détecter des anomalies.
[^] # Re: Flang
Posté par Sylvestre Ledru (site web personnel) . Évalué à 4.
C'est dans Debian Buster (testing pour le moment):
Ca n'est pas dans le projet LLVM (pour le moment?)$ apt install flang
[^] # Re: Flang
Posté par serge_sans_paille (site web personnel) . Évalué à 3.
À ce sujet, la lecture de ce thread est intéressante.
[^] # Re: Flang
Posté par vmagnin (site web personnel) . Évalué à 3.
Merci pour ce thread très intéressant. Je ne savais pas que NVIDIA était derrière Flang, et je n'avais pas vu ce nouveau projet f18 de réécriture de Flang en C++. Avec pour but de faire partie du projet LLVM à côté de Clang.
[^] # Re: Flang
Posté par vmagnin (site web personnel) . Évalué à 1.
Ca y est, Flang (ou plutôt sa réécriture f18) a été accepté dans le projet LLVM :
https://lists.llvm.org/pipermail/llvm-dev/2019-April/131703.html
[^] # Re: Flang
Posté par vmagnin (site web personnel) . Évalué à 1.
Merci beaucoup pour l'info,
effectivement, j'ai une machine virtuelle avec une Debian Sid et je vois un paquet :
flang-7/unstable 20181226-2 amd64
Fortran compiler front-end for LLVM
Je testerai la semaine prochaine.
[^] # Re: Flang
Posté par vmagnin (site web personnel) . Évalué à 1.
Je viens d'installer le paquet flang-7 sur une Debian Sid. Ca marche bien sur les petits programmes que j'ai essayés. Par contre avec mon projet gtk-fortran, il compile (longuement) quelques fichiers puis affiche des erreurs :
C'est un fichier qui contient des énumérateurs Fortran dont la valeur est pour quelques-uns définie par une expression:F90-S-0087-Non-constant expression where constant expression required (/home/osboxes/gtk-fortran/src/gtkenums-auto.f90: 355)
...
D'après la norme Fortran (>=2003), on peut utiliser desenum, bind(c) !GModuleFlags
enumerator :: G_MODULE_BIND_LAZY = ISHFTC(1, 0)
enumerator :: G_MODULE_BIND_LOCAL = ISHFTC(1, 1)
enumerator :: G_MODULE_BIND_MASK = INT(z'03')
end enum
scalar-int-constant-expr
pour définir les énumérateurs. Et une telle expression est définie ainsi :Les fonctions
ISHFTC()
etINT()
sont pourtant des fonctions intrinsèques du langage. Avec gfortran, ça passe sans problème. Avec ifort 2015 également.J'imagine qu'il me faudra attendre un peu que le nouveau compilateur f18 soit opérationnel et disponible sous forme de paquet.
[^] # Re: Flang
Posté par Sylvestre Ledru (site web personnel) . Évalué à 2.
Déposes un rapport bug sur flang
# Speculative Load Hardening
Posté par Harvesterify (site web personnel) . Évalué à 8.
Petite précision : le SLH ne permet de se prémunir uniquement de Spectre v1, et encore, pas totalement, la couverture des branchements conditionnels n'est pas complète. C'est cependant mieux que rien.
Une option non documentée de llc permet en outre d'insérer automatiquement l'instruction LFENCE, préconisée par Intel pour contrer Spectre v1, et ce sur tous les branchement conditionnels, pour le coup. L'impact sur les performances reste néanmoins très élevé pour cette dernière solution, mais c'est la seule connue actuellement offrant des garanties de complétude.
Mes messages engagent qui je veux.
[^] # Re: Speculative Load Hardening
Posté par Nicolas Boulay (site web personnel) . Évalué à 3. Dernière modification le 22 mars 2019 à 11:14.
N'est-il pas possible de compiler uniquement un fichier sensible avec l'option LFENCE ? Faire un seul fichier C qui manipule des clefs ou token crypto, et compiler uniquement celui-là avec l'option pour éviter les pénalités d’exécution.
Ou alors, est-il impossible de faire un link entre 2 objets ayant des options de compilations différentes ?
"La première sécurité est la liberté"
[^] # Re: Speculative Load Hardening
Posté par NicolasP . Évalué à 2.
Spectre permet d’accéder à n'importe quelle zone mémoire allouée à un processus. Du coup, ça ne servirait à rien de compiler seulement une partie du source avec cette option.
[^] # Re: Speculative Load Hardening
Posté par Nicolas Boulay (site web personnel) . Évalué à 3.
ok, mais dans ce cas à quoi sert de mettre des LFENCE ?
"La première sécurité est la liberté"
# typo
Posté par azerttyu (site web personnel) . Évalué à 4. Dernière modification le 22 mars 2019 à 07:25.
Merci pour cette contribution
Je note des petites erreurs de typo
- un profile , il y a un e de trop, angliscisme :)
- en ignorants , un s de trop
- de faille dite , un s manquant et circonflexe (potentiellement un s aussi selon si on parle de la famille ou des failles)
Ce message peut s'auto détruire une fois corrigé, merci :)
[^] # Re: typo
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Corrigé, merci. (Dîtes passé simple vs dites participe passé)
[^] # Re: typo
Posté par betonniere (site web personnel) . Évalué à 1.
Dans la série anglicisme, "Faute de frappe" ou éventuellement "coquille" auraient mieux convenu que "typo" ;-)
[^] # Re: typo
Posté par BAud (site web personnel) . Évalué à 3.
typo est tout à fait français : cf. https://fr.wiktionary.org/wiki/typo
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.