Zum Inhalt springen

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.

Von Tech AI Wire Team

3 Min. Lesezeit

XLinkedIn
Screenshot des Rust-Blog-Beitrags „Announcing Rust 1.99.1“ vom 15. Oktober 2026 vom Rust Release Team, der den Befehl rustup update stable zeigt.

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.

FehlerWer betroffen warDie KorrekturIssue
Fehlendes wcslen-SymbolEinige Targets, insbesondere UEFIwcslen als Fallback zu compiler-builtins hinzugefügt#163614
FFI-bool-Rückgabe falsch kompiliertx86_64Rückgabetyp wieder für Zero-Extension markiert#163911
rust-lld kann libLLVM nicht ladenmacOS, ohne den rustup-Proxyrust-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

  1. Announcing Rust 1.99.1 - Rust Blog
  2. Rust 1.99.1 Released: Three Critical Bugs Fixed in Record Two-Week Turnaround - Linux Compatible
  3. Rust 1.99.1 Released: Three Regressions Fixed - PBXScience

Ähnliche Artikel

Five dark gray squares in a row that lighten from left to right, ending in a single solid red square.
Programmieren

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.