Rust 1.99.1 corrige la mauvaise compilation des bool FFI et deux bugs d'édition de liens
Rust 1.99.1 corrige trois régressions de 1.99.0, dont des fonctions FFI sur x86_64 qui pouvaient renvoyer des valeurs bool autres que 0 ou 1. Mettez à jour avec rustup.
3 min de lecture

La Rust Release Team a publié Rust 1.99.1 le 15 octobre 2026, deux semaines après Rust 1.99.0. Cette version corrective règle trois régressions, c'est-à-dire des choses qui fonctionnaient dans les versions précédentes puis ont cessé de fonctionner. La plus grave faisait que certaines fonctions qui renvoient un bool à du code C rendaient, sur x86_64, des valeurs autres que 0 ou 1, sans aucun avertissement à la compilation.
Les trois corrections
L'annonce du blog Rust liste une correction pour la bibliothèque standard, une pour le compilateur et une pour l'éditeur de liens.
| Bug | Qui était touché | La correction | Issue |
|---|---|---|---|
Symbole wcslen manquant | Certaines cibles, UEFI en particulier | wcslen ajouté à compiler-builtins comme solution de repli | #163614 |
Retour bool FFI mal compilé | x86_64 | Type de retour de nouveau marqué pour l'extension par zéros | #163911 |
rust-lld ne peut pas charger libLLVM | macOS, sans le proxy rustup | rust-lld compilé avec un rpath vers libLLVM.dylib | #163947 |
Mettez à jour avec rustup update stable. Le blog suggère aussi de tester les toolchains beta et nightly afin que des régressions comme celles-ci soient repérées avant une version.
Le bug des bool sur x86_64
La FFI, l'interface de fonctions étrangères (foreign function interface), est la façon dont Rust appelle du code C et dont C appelle Rust. Un bool doit arriver exactement sous la forme 0 ou 1. Sur x86_64, les règles d'appel imposent qu'un bool renvoyé soit étendu par des zéros, c'est-à-dire que les bits de poids fort inutilisés du registre sont mis à zéro.
Dans 1.99.0, les bits 1 à 7 du registre de retour n'étaient pas spécifiés, selon le blog, si bien qu'un appelant pouvait voir des valeurs autres que 0 ou 1. La correction marque de nouveau le type de retour pour l'extension par zéros, « comme l'exige l'ABI ». Un signalement a relevé la valeur 16, selon Linux Compatible.
Linux Compatible fait remonter la cause à une modification antérieure, la PR #142389, qui a supprimé l'extension par zéros des types de retour scalaires sur x86_64. Le problème n'est apparu qu'au moment où une modification ultérieure a retiré un filet de sécurité. Le site indique qu'aarch64 et loongarch64 n'étaient pas concernés. PBXScience juge ce bug le plus grave des trois, car il échouait silencieusement.
Les bugs de wcslen et de l'éditeur de liens sur macOS
wcslen est une fonction C qui mesure une chaîne de caractères larges. Une passe d'optimisation de LLVM peut y insérer des appels, mais certaines cibles ne la fournissent pas. Sur UEFI, la couche de firmware qui démarre un PC, tout projet utilisant std était cassé, indique le blog.
Linux Compatible ajoute que l'erreur n'apparaissait que dans les builds de release. En attendant la mise à jour, le site indique un contournement : définir RUSTFLAGS="-C llvm-args=-disable-loop-idiom-wcslen" pour désactiver la passe.
Le troisième bug touchait macOS. Lorsque rust-lld, l'éditeur de liens fourni avec Rust, était lancé sans le proxy rustup, il ne trouvait pas libLLVM.dylib. Un rpath est un chemin de recherche de bibliothèques intégré à un programme, et 1.99.1 en inclut désormais un. Linux Compatible signale le plantage sur Apple Silicon. Le site indique que les toolchains installées avec fenix étaient touchées, car elles ne passent pas par le proxy de rustup.
Cette version fait suite à Rust 1.99.0, sorti le 1er octobre, qui a stabilisé les définitions de fonctions C-variadic et est passé à LLVM 23. PBXScience note que Rust 1.100.0 est en beta et doit sortir le 12 novembre.
Ce que cela signifie pour les développeurs
Mettez à jour maintenant si du code Rust renvoie un bool à C sur x86_64. Les valeurs erronées ne provoquent pas de plantage à elles seules. Un appelant C qui teste == 1 ou utilise la valeur comme index de tableau peut prendre la mauvaise branche sans bruit. Recompilez et redéployez chaque bibliothèque compilée avec 1.99.0 qui expose une telle fonction.
Vérifiez vos journaux et vos résultats de tests des deux dernières semaines pour repérer un comportement FFI inhabituel. Un test qui ne vérifie que des résultats « truthy » n'aurait pas détecté des valeurs comme 16.
Si vous compilez pour UEFI ou des cibles embarquées en mode release, 1.99.1 devrait corriger les erreurs d'édition de liens liées à wcslen. Retirez le contournement RUSTFLAGS une fois la mise à jour faite, pour que l'optimisation s'exécute de nouveau.
Sur macOS, fenix et les autres configurations qui appellent rustc directement, sans rustup, retrouvent un rust-lld fonctionnel. Cela inclut les builds WebAssembly qui passent par lui pour l'édition de liens.
Épinglez la version de votre toolchain dans la CI. Un fichier rust-toolchain.toml fait du passage de 1.99.0 à 1.99.1 un changement explicite et vérifiable en revue.
Sources
- Announcing Rust 1.99.1 - Rust Blog
- Rust 1.99.1 Released: Three Critical Bugs Fixed in Record Two-Week Turnaround - Linux Compatible
- Rust 1.99.1 Released: Three Regressions Fixed - PBXScience
Articles liés

Rust 1.100 retire les outils hôtes des cibles Windows 32 bits
Rust 1.100 cesse de livrer le compilateur pour Windows 32 bits. Les cibles i686 gardent la bibliothèque standard, donc la compilation croisée depuis Windows 64 bits continue de fonctionner.

Rust 1.99 stabilise la définition de fonctions C-variadic
Rust 1.99.0, sorti le 1er octobre 2026, permet à Rust stable de définir des fonctions C-variadic comme printf, passe à LLVM 23 et fait de no_mangle sur les génériques une erreur.

Le type never de Rust, expliqué
Le type never de Rust, écrit !, est le type du code qui ne produit jamais de valeur. Il est stable dans Rust 1.100 après dix ans, et il change le repli de type.