Rust 1.99.1 corrige una compilación errónea de bool en FFI y dos fallos de enlazado
Rust 1.99.1 corrige tres regresiones de 1.99.0, entre ellas funciones FFI en x86_64 que podían devolver valores bool distintos de 0 o 1. Actualiza con rustup.
3 min de lectura

El Rust Release Team publicó Rust 1.99.1 el 15 de octubre de 2026, dos semanas después de Rust 1.99.0. Esta versión de mantenimiento corrige tres regresiones, cosas que funcionaban en versiones anteriores y luego se rompieron. La más grave hacía que algunas funciones que devuelven un bool a código C entregaran en x86_64 valores distintos de 0 o 1, sin ningún aviso al compilar.
Las tres correcciones
El anuncio del blog de Rust enumera una corrección para la biblioteca estándar, otra para el compilador y otra para el enlazador.
| Fallo | A quién afectó | La corrección | Issue |
|---|---|---|---|
Falta el símbolo wcslen | Algunos targets, UEFI en particular | wcslen añadido a compiler-builtins como alternativa de respaldo | #163614 |
Retorno bool de FFI mal compilado | x86_64 | El tipo de retorno vuelve a marcarse para extensión con ceros | #163911 |
rust-lld no puede cargar libLLVM | macOS, sin el proxy de rustup | rust-lld compilado con un rpath a libLLVM.dylib | #163947 |
Actualiza con rustup update stable. El blog también sugiere probar las toolchains beta y nightly para que regresiones como estas se detecten antes de una versión.
El fallo de bool en x86_64
FFI, la interfaz de funciones externas (foreign function interface), es la forma en que Rust llama a código C y C llama a Rust. Un bool debe llegar exactamente como 0 o 1. En x86_64, las reglas de llamada dicen que un bool devuelto tiene que extenderse con ceros, es decir, los bits superiores no usados del registro se ponen a cero.
En 1.99.0, los bits 1 a 7 del registro de retorno quedaban sin especificar, según el blog, así que quien llamaba podía ver valores distintos de 0 o 1. La corrección vuelve a marcar el tipo de retorno para la extensión con ceros, "como exige la ABI". Un informe vio el valor 16, según Linux Compatible.
Linux Compatible atribuye la causa a un cambio anterior, el PR #142389, que eliminó la extensión con ceros de los tipos de retorno escalares en x86_64. Solo salió a la luz cuando un cambio posterior quitó una red de seguridad. El sitio dice que aarch64 y loongarch64 no se vieron afectados. PBXScience lo considera el más grave de los tres fallos porque fallaba en silencio.
Los fallos de wcslen y del enlazador en macOS
wcslen es una función de C que mide una cadena de caracteres anchos. Un pase de optimización de LLVM puede insertar llamadas a ella, pero algunos targets no la proporcionan. En UEFI, la capa de firmware que arranca un PC, cualquier proyecto que usara std estaba roto, según el blog.
Linux Compatible añade que el error solo aparecía en las builds de release. Hasta que actualices, indica una solución temporal: definir RUSTFLAGS="-C llvm-args=-disable-loop-idiom-wcslen" para desactivar el pase.
El tercer fallo afectó a macOS. Cuando rust-lld, el enlazador que incluye Rust, se ejecutaba sin el proxy de rustup, no encontraba libLLVM.dylib. Un rpath es una ruta de búsqueda de bibliotecas integrada en un programa, y 1.99.1 ahora incluye una. Linux Compatible informa del cierre inesperado en Apple Silicon. Según el sitio, las toolchains instaladas con fenix se vieron afectadas, porque no pasan por el proxy de rustup.
Esta versión llega después de Rust 1.99.0 del 1 de octubre, que estabilizó las definiciones de funciones C-variadic y pasó a LLVM 23. PBXScience señala que Rust 1.100.0 está en beta y que se espera para el 12 de noviembre.
Qué significa esto para los desarrolladores
Actualiza ya si algún código Rust devuelve un bool a C en x86_64. Los valores erróneos no provocan un cierre inesperado por sí solos. Un llamador en C que compruebe == 1 o use el valor como índice de un array puede tomar la rama equivocada sin avisar. Recompila y vuelve a desplegar toda biblioteca compilada con 1.99.0 que exponga una función así.
Revisa tus registros y los resultados de tus pruebas de las últimas dos semanas en busca de un comportamiento de FFI extraño. Una prueba que solo compruebe resultados "truthy" no habría detectado valores como 16.
Si compilas para UEFI o targets embebidos en modo release, 1.99.1 debería corregir los errores de enlazado relacionados con wcslen. Quita la solución temporal de RUSTFLAGS en cuanto actualices, para que la optimización vuelva a ejecutarse.
En macOS, fenix y otras configuraciones que llaman a rustc directamente, sin rustup, vuelven a tener un rust-lld que funciona. Eso incluye las builds de WebAssembly que enlazan a través de él.
Fija la versión de tu toolchain en la CI. Un archivo rust-toolchain.toml convierte el paso de 1.99.0 a 1.99.1 en un cambio explícito y revisable.
Fuentes
- 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
Artículos relacionados

Rust 1.100 elimina las herramientas de host para Windows de 32 bits
Rust 1.100 deja de distribuir el compilador para Windows de 32 bits. Los objetivos i686 conservan la biblioteca estándar, así que la compilación cruzada desde Windows de 64 bits sigue funcionando.

Rust 1.99 estabiliza la definición de funciones C-variadic
Rust 1.99.0, publicado el 1 de octubre de 2026, permite a Rust estable definir funciones C-variadic como printf, pasa a LLVM 23 y convierte no_mangle en genéricos en un error.

El tipo never de Rust, explicado
El tipo never de Rust, escrito !, es el tipo del código que nunca produce un valor. Es estable en Rust 1.100 tras diez años, y cambia el respaldo de tipos.