Pular para o conteúdo

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.

Por Tech AI Wire Team

3 min de leitura

XLinkedIn
Captura de tela do post do Rust Blog Announcing Rust 1.99.1, de 15 de outubro de 2026, do Rust Release Team, mostrando o comando rustup update stable.

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.

BugQuem foi afetadoA correçãoIssue
Símbolo wcslen ausenteAlguns targets, em especial UEFIwcslen adicionado ao compiler-builtins como fallback#163614
Retorno bool de FFI compilado incorretamentex86_64Tipo de retorno marcado de novo para extensão com zeros#163911
rust-lld não consegue carregar a libLLVMmacOS, sem o proxy do rustuprust-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

  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

Artigos relacionados

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

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.