Saltar al contenido

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.

Por Tech AI Wire Team

3 min de lectura

XLinkedIn
Captura de pantalla de la entrada del Rust Blog «Announcing Rust 1.99.1», del 15 de octubre de 2026, del Rust Release Team, que muestra el comando rustup update stable.

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.

FalloA quién afectóLa correcciónIssue
Falta el símbolo wcslenAlgunos targets, UEFI en particularwcslen añadido a compiler-builtins como alternativa de respaldo#163614
Retorno bool de FFI mal compiladox86_64El tipo de retorno vuelve a marcarse para extensión con ceros#163911
rust-lld no puede cargar libLLVMmacOS, sin el proxy de rustuprust-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

  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

Artículos relacionados

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

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.