Rust 1.99.1 behebt FFI-bool-Fehlkompilierung und zwei Link-Fehler
Rust 1.99.1 behebt drei Regressionen aus 1.99.0, darunter x86_64-FFI-Funktionen, die bool-Werte außer 0 oder 1 zurückgeben konnten. Aktualisieren Sie mit rustup.
3 Min. Lesezeit

Das Rust Release Team hat Rust 1.99.1 am 15. Oktober 2026 veröffentlicht, zwei Wochen nach Rust 1.99.0. Das Point-Release behebt drei Regressionen, also Dinge, die in früheren Versionen funktionierten und dann kaputtgingen. Die schwerwiegendste führte dazu, dass manche Funktionen, die einen bool an C-Code zurückgeben, auf x86_64 andere Werte als 0 oder 1 lieferten, ohne Warnung beim Kompilieren.
Die drei Korrekturen
Die Ankündigung im Rust-Blog nennt je eine Korrektur für die Standardbibliothek, den Compiler und den Linker.
| Fehler | Wer betroffen war | Die Korrektur | Issue |
|---|---|---|---|
Fehlendes wcslen-Symbol | Einige Targets, insbesondere UEFI | wcslen als Fallback zu compiler-builtins hinzugefügt | #163614 |
FFI-bool-Rückgabe falsch kompiliert | x86_64 | Rückgabetyp wieder für Zero-Extension markiert | #163911 |
rust-lld kann libLLVM nicht laden | macOS, ohne den rustup-Proxy | rust-lld mit einem rpath auf libLLVM.dylib gebaut | #163947 |
Aktualisieren Sie mit rustup update stable. Der Blog empfiehlt außerdem, Beta- und Nightly-Toolchains zu testen, damit Regressionen wie diese vor einem Release auffallen.
Der bool-Fehler auf x86_64
FFI, das Foreign Function Interface, ist der Weg, über den Rust C-Code aufruft und C Rust aufruft. Ein bool muss genau als 0 oder 1 ankommen. Auf x86_64 schreiben die Aufrufregeln vor, dass ein zurückgegebener bool nullerweitert (zero-extended) werden muss. Das heißt, die ungenutzten oberen Bits des Registers werden gelöscht.
In 1.99.0 blieben die Bits 1 bis 7 des Rückgaberegisters unbestimmt, so der Blog, sodass ein Aufrufer andere Werte als 0 oder 1 sehen konnte. Die Korrektur markiert den Rückgabetyp wieder für die Zero-Extension, "wie es das ABI verlangt". Ein Bericht verzeichnete den Wert 16, so Linux Compatible.
Linux Compatible führt die Ursache auf eine frühere Änderung zurück, PR #142389, die auf x86_64 die Zero-Extension bei skalaren Rückgabetypen entfernte. Sie trat erst zutage, als eine spätere Änderung ein Sicherheitsnetz entfernte. Laut der Seite waren aarch64 und loongarch64 nicht betroffen. PBXScience nennt dies den schwerwiegendsten der drei Fehler, weil er still fehlschlug.
Die Fehler bei wcslen und beim macOS-Linker
wcslen ist eine C-Funktion, die die Länge eines Wide-Character-Strings misst. Ein LLVM-Optimierungspass kann Aufrufe dieser Funktion einfügen, aber manche Targets stellen sie nicht bereit. Auf UEFI, der Firmware-Schicht, die einen PC startet, war laut dem Blog jedes Projekt kaputt, das std nutzt.
Linux Compatible ergänzt, dass der Fehler nur in Release-Builds auftrat. Bis Sie aktualisieren, nennt die Seite einen Workaround: Setzen Sie RUSTFLAGS="-C llvm-args=-disable-loop-idiom-wcslen", um den Pass abzuschalten.
Der dritte Fehler betraf macOS. Wenn rust-lld, der Linker, den Rust mitliefert, ohne den rustup-Proxy ausgeführt wurde, fand er libLLVM.dylib nicht. Ein rpath ist ein in ein Programm eingebauter Suchpfad für Bibliotheken, und 1.99.1 enthält jetzt einen. Linux Compatible berichtet von dem Absturz auf Apple Silicon. Laut der Seite waren mit fenix installierte Toolchains betroffen, weil sie nicht über den Proxy von rustup laufen.
Dieses Release folgt auf Rust 1.99.0 vom 1. Oktober, das die Definition von C-variadic-Funktionen stabilisiert hat und auf LLVM 23 umgestiegen ist. PBXScience merkt an, dass Rust 1.100.0 in der Beta ist und am 12. November erscheinen soll.
Was das für Entwickler bedeutet
Aktualisieren Sie jetzt, wenn Rust-Code auf x86_64 einen bool an C zurückgibt. Die falschen Werte führen nicht von selbst zu einem Absturz. Ein C-Aufrufer, der auf == 1 prüft oder den Wert als Array-Index nutzt, kann unbemerkt den falschen Zweig nehmen. Bauen und deployen Sie jede mit 1.99.0 gebaute Bibliothek neu, die eine solche Funktion bereitstellt.
Prüfen Sie Ihre Logs und Testergebnisse der vergangenen zwei Wochen auf auffälliges FFI-Verhalten. Ein Test, der nur auf "truthy" Ergebnisse prüft, hätte Werte wie 16 nicht erkannt.
Wenn Sie im Release-Modus für UEFI oder Embedded-Targets bauen, sollte 1.99.1 Link-Fehler zu wcslen beheben. Entfernen Sie den RUSTFLAGS-Workaround nach dem Upgrade, damit die Optimierung wieder läuft.
Unter macOS bekommen fenix und andere Setups, die rustc direkt aufrufen, ohne rustup, wieder ein funktionierendes rust-lld. Dazu gehören WebAssembly-Builds, die darüber linken.
Pinnen Sie Ihre Toolchain-Version in der CI. Eine Datei rust-toolchain.toml macht den Wechsel von 1.99.0 auf 1.99.1 zu einer expliziten, überprüfbaren Änderung.
Quellen
- 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
Ähnliche Artikel

Rust 1.100 streicht Host-Tools für 32-Bit-Windows-Ziele
Rust 1.100 liefert keinen Compiler mehr für 32-Bit-Windows aus. Die i686-Ziele behalten die Standardbibliothek, sodass Cross-Compiling von 64-Bit-Windows weiter funktioniert.

Rust 1.99 stabilisiert die Definition von C-variadic-Funktionen
Rust 1.99.0, erschienen am 1. Oktober 2026, erlaubt in stabilem Rust die Definition von C-variadic-Funktionen wie printf, wechselt auf LLVM 23 und macht no_mangle bei Generics zum Fehler.

Rusts Never-Type, erklärt
Rusts Never-Type, geschrieben !, ist der Typ von Code, der niemals einen Wert liefert. Er ist nach zehn Jahren in Rust 1.100 stabil und ändert den Type-Fallback.