Rust 1.99.1 corrige compilação incorreta de bool em FFI e dois bugs de linkagem
O Rust 1.99.1 corrige três regressões do 1.99.0, entre elas funções FFI no x86_64 que podiam retornar valores bool diferentes de 0 ou 1. Atualize com o rustup.
3 min de leitura

O Rust Release Team lançou o Rust 1.99.1 em 15 de outubro de 2026, duas semanas depois do Rust 1.99.0. A versão de correção resolve três regressões, coisas que funcionavam em versões anteriores e depois quebraram. A mais grave fazia com que algumas funções que retornam um bool para código C devolvessem, no x86_64, valores diferentes de 0 ou 1, sem nenhum aviso na compilação.
As três correções
O anúncio no blog do Rust lista uma correção para a biblioteca padrão, uma para o compilador e uma para o linker.
| Bug | Quem foi afetado | A correção | Issue |
|---|---|---|---|
Símbolo wcslen ausente | Alguns targets, em especial UEFI | wcslen adicionado ao compiler-builtins como fallback | #163614 |
Retorno bool de FFI compilado incorretamente | x86_64 | Tipo de retorno marcado de novo para extensão com zeros | #163911 |
rust-lld não consegue carregar a libLLVM | macOS, sem o proxy do rustup | rust-lld compilado com um rpath para a libLLVM.dylib | #163947 |
Atualize com rustup update stable. O blog também sugere testar as toolchains beta e nightly para que regressões como essas sejam detectadas antes de uma versão.
O bug do bool no x86_64
FFI, a interface de funções externas (foreign function interface), é como o Rust chama código C e como o C chama Rust. Um bool precisa chegar exatamente como 0 ou 1. No x86_64, as regras de chamada dizem que um bool retornado precisa ser estendido com zeros, ou seja, os bits superiores não usados do registrador são zerados.
No 1.99.0, os bits 1 a 7 do registrador de retorno ficavam sem especificação, segundo o blog, então quem chamava podia ver valores diferentes de 0 ou 1. A correção volta a marcar o tipo de retorno para extensão com zeros, "como exige a ABI". Um relato viu o valor 16, segundo o Linux Compatible.
O Linux Compatible atribui a causa a uma mudança anterior, o PR #142389, que retirou a extensão com zeros dos tipos de retorno escalares no x86_64. O problema só apareceu quando uma mudança posterior removeu uma rede de segurança. O site diz que aarch64 e loongarch64 não foram afetados. O PBXScience considera este o mais grave dos três bugs porque ele falhava em silêncio.
Os bugs do wcslen e do linker no macOS
wcslen é uma função C que mede uma string de caracteres largos. Um passo de otimização do LLVM pode inserir chamadas a ela, mas alguns targets não a fornecem. No UEFI, a camada de firmware que inicia um PC, qualquer projeto que usasse std estava quebrado, segundo o blog.
O Linux Compatible acrescenta que o erro só aparecia em builds de release. Até você atualizar, o site indica uma solução alternativa: definir RUSTFLAGS="-C llvm-args=-disable-loop-idiom-wcslen" para desligar o passo.
O terceiro bug afetou o macOS. Quando o rust-lld, o linker que acompanha o Rust, era executado sem o proxy do rustup, ele não encontrava a libLLVM.dylib. Um rpath é um caminho de busca de bibliotecas embutido em um programa, e o 1.99.1 agora inclui um. O Linux Compatible relata o travamento no Apple Silicon. Segundo o site, toolchains instaladas com o fenix foram afetadas, porque não passam pelo proxy do rustup.
Esta versão vem depois do Rust 1.99.0, de 1º de outubro, que estabilizou as definições de funções C-variadic e passou para o LLVM 23. O PBXScience observa que o Rust 1.100.0 está em beta e deve sair em 12 de novembro.
O que isso significa para desenvolvedores
Atualize agora se algum código Rust retorna um bool para C no x86_64. Os valores errados não causam travamento por si só. Um chamador em C que verifica == 1 ou usa o valor como índice de array pode seguir o caminho errado sem aviso. Recompile e reimplante toda biblioteca compilada com o 1.99.0 que exponha uma função assim.
Verifique seus logs e resultados de testes das últimas duas semanas em busca de comportamento estranho de FFI. Um teste que só verifica resultados "truthy" não teria detectado valores como 16.
Se você compila para UEFI ou targets embarcados em modo release, o 1.99.1 deve corrigir os erros de linkagem relacionados ao wcslen. Remova a solução alternativa de RUSTFLAGS depois de atualizar, para que a otimização volte a rodar.
No macOS, o fenix e outras configurações que chamam o rustc diretamente, sem o rustup, voltam a ter um rust-lld funcionando. Isso inclui builds de WebAssembly que fazem a linkagem por meio dele.
Fixe a versão da sua toolchain na CI. Um arquivo rust-toolchain.toml torna a passagem do 1.99.0 para o 1.99.1 uma mudança explícita e revisável.
Fontes
- 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
Artigos relacionados

Rust 1.100 remove as ferramentas de host dos alvos Windows de 32 bits
O Rust 1.100 deixa de distribuir o compilador para Windows de 32 bits. Os alvos i686 mantêm a biblioteca padrão, então a compilação cruzada a partir do Windows de 64 bits continua funcionando.

Rust 1.99 estabiliza a definição de funções C-variadic
O Rust 1.99.0, lançado em 1º de outubro de 2026, permite que o Rust estável defina funções C-variadic como printf, passa para o LLVM 23 e torna no_mangle em genéricos um erro.

O tipo never do Rust, explicado
O tipo never do Rust, escrito !, é o tipo do código que nunca produz um valor. Está estável no Rust 1.100 após dez anos, e muda o recuo de tipos.