Rust 1.99.1 FFI Bool Bug Fix Explained: The Silent Bug That Returned 16 Instead of True (World Tech)

rust 1.99.1 ffi bool bug fix explained — code on screen (illustrative image)

Image: Wikimedia Commons / Lionel Rowe, CC0. Illustrative image: source code on screen. This is NOT a screenshot of the Rust 1.99.1 release — Rust 1.99.1 is a compiler point release with no product photo, so no image here shows it.

TL;DR — rust 1.99.1 ffi bool bug fix explained: Rust 1.99.1, published 15 October 2026, fixes three regressions from Rust 1.99.0 — most seriously, a silent miscompilation where a Rust function returning a bool to C code on x86_64 could hand back values like 16 instead of true or false. It adds no new features. Update with rustup update stable.

📌 KEY HIGHLIGHTS

  • The release: Rust 1.99.1 arrived on 15 October 2026, two weeks after Rust 1.99.0 (1 October) — a point release that fixes regressions only.
  • The serious bug: on x86_64, a Rust bool returned across FFI could leave bits 1–7 of the return register unspecified, so callers could observe values other than 0 or 1.
  • The other two fixes: a missing wcslen symbol that broke linking on some targets (UEFI worst hit), and a rust-lld failure to load libLLVM on macOS.
  • Who must update now: anyone shipping Rust libraries to C or other languages, UEFI/embedded developers, and macOS users invoking the toolchain directly.
  • What it is NOT: not a feature release — if you want what's new in Rust, that was 1.99.0, not this patch.

What happened?

On 15 October 2026, the Rust team published Rust 1.99.1, a point release of the systems programming language. Point releases exist for exactly this situation: a stable release ships with a few bad regressions, and rather than making users wait six weeks for the next minor release, the team ships the fixes on their own. Rust 1.99.1 remains the current stable release, and the update is a single command for rustup users: rustup update stable.

Why does a three-fix patch deserve a full explanation? Because of the nature of the worst bug. Compiler bugs are usually loud — a build fails, a test goes red. This one was silent: correct-looking source code produced valid-looking but wrong machine code, with no diagnostic, across one of the most common calling conventions in systems programming. Silent bugs are the ones that survive testing and reach production, which is why the Rust team shipped the fix in about two weeks.

rust 1.99.1 ffi bool bug fix explained: the three fixes

Here is each regression, who it hits, and what changed — in plain language first, with the technical detail after:

FixWho it hitsSymptom before 1.99.1
FFI bool miscompilation on x86_64Rust libraries called from C or other languagesCallers could see raw values other than 0 or 1 (e.g. 16) for a bool return
Missing wcslen symbolUEFI and embedded targets, some other targetsLink errors; any project using std on UEFI targets was broken
rust-lld fails to load libLLVM on macOSmacOS users invoking the toolchain without the rustup proxyThe linker could fail to run at all

1. The FFI bool bug — the one to understand. When a Rust function returns a bool to a foreign caller (Foreign Function Interface, or FFI — the boundary where Rust talks to C or another language), the application binary interface (ABI) requires the value to be zero-extended: only bit 0 carries the true/false value, and the rest of the register must be zero. In Rust 1.99.0, that zero-extension marking was lost on x86_64, so bits 1–7 were left unspecified. In one reported case, a font tool's function returned the raw byte and a caller reading it as a boolean saw 16 — a value that is neither true nor false in the ABI's terms, and that crashed the calling runtime. A test written purely in Rust would not catch this: the bug only appears at the boundary, in the caller. Rust 1.99.1 restores the required zero-extension.

rust 1.99.1 ffi bool bug fix explained — a code editor (illustrative image)

Image: Wikimedia Commons / Microsoft (VS Code screenshot, free software license). Illustrative image: a code editor. This is NOT the Rust toolchain and does NOT show Rust 1.99.1.

2. The missing wcslen symbol. An LLVM optimisation pass (loop-idiom-wcslen) can introduce calls to the C function wcslen into compiled code, but some Rust targets have no such function in their C library. UEFI targets were hit hardest: calls were introduced into the precompiled standard library itself, so any project using std on those targets failed to link. Rust 1.99.1 provides wcslen as a fallback in its compiler-builtins library.

3. The macOS linker failure. rust-lld, Rust's linker, could fail to run on macOS when the compiler was invoked without the rustup proxy, because there was no direct setting telling it where to find libLLVM.dylib. It is now built with an rpath entry pointing at the directory containing that library.

Why it matters for developers

For most Rust developers, this release changes nothing visible — and that is the point. If you write pure Rust applications with no FFI boundary, no UEFI target and no direct macOS toolchain invocation, you were almost certainly unaffected, and updating is still worth doing simply because it costs one command and removes three known defects from your toolchain.

If you ship a Rust library that other languages call, the calculus is different: update now, and re-run the tests that exercise the FFI boundary — including tests written in the calling language, not just in Rust. The reported bool case is a warning about where to test: a Rust-only test suite exercises the Rust side of the boundary, and this bug lived on the other side of it. The same logic applies to the other two fixes: if your CI builds UEFI targets or invokes the macOS toolchain directly, those are the builds to re-run after updating.

There is also a wider lesson that the Rust team itself would recognise. Rust's promise is memory safety without a garbage collector, enforced by the borrow checker at compile time. A miscompilation underneath that promise is therefore more alarming than an ordinary bug: the source code obeyed every rule, and the machine code still came out wrong. The fast turnaround — roughly two weeks from the 1.99.0 release to the fix — is the safety net working, but it is a reminder that even a safety-focused toolchain needs its users to actually install its patches.

Should you care?

✅ Verdict: Update now if you ship FFI libraries, build UEFI/embedded targets, or run the macOS toolchain directly — the FFI bool bug is silent, and silent bugs are the dangerous kind. ⏳ Everyone else: still update at your next convenient point; it is one command, it adds no breaking changes, and it removes three known defects. Do NOT expect new language features — this is a patch, not a feature release.

How to update to Rust 1.99.1

If you installed Rust through rustup, run rustup update stable, then confirm with rustc --version — it should report 1.99.1. If you do not use rustup, get the new toolchain from the Rust website's install page. After updating, re-run the builds that match your risk: FFI boundary tests in the calling language, UEFI/embedded builds, and any direct macOS toolchain invocations. A successful compile alone is not proof the fix is in place — check the reported version number, and check the boundary.

For context, Rust 1.99.0 (1 October 2026) was the feature release: among other things, it stabilised C-variadic function definitions, a long-requested feature for calling C-style variadic functions from Rust. Rust 1.99.1 changes none of that — it only repairs the three regressions above.

FAQs

What is Rust 1.99.1? Rust 1.99.1 is a point release of the Rust programming language, published on 15 October 2026. It fixes three regressions introduced around Rust 1.99.0 and adds no new language features. It is the current stable release.

What was the Rust FFI bool bug? On x86_64, Rust functions returning a bool across FFI could leave bits 1–7 of the return register unspecified instead of zero-extending the value as the ABI requires. Callers could therefore observe raw values other than 0 or 1 — 16 in one reported case — even though the Rust source code was correct. Rust 1.99.1 restores the zero-extension.

Does Rust 1.99.1 add new features? No. It is a patch release: a missing wcslen symbol fix, the FFI bool miscompilation fix, and a macOS rust-lld library-path fix. New features arrived in Rust 1.99.0, including stabilised C-variadic function definitions.

How do I update to Rust 1.99.1? If you use rustup, run rustup update stable and verify with rustc --version, which should report 1.99.1. Without rustup, download the new toolchain from the Rust website's install page.

Do I need to update if I don't use FFI? You were almost certainly unaffected by the worst bug, but updating is still recommended: it is one command, it carries no breaking changes, and it also fixes the UEFI linking and macOS linker regressions. If you build UEFI targets or invoke the macOS toolchain directly, update promptly.

Takeaway: Rust 1.99.1 is a small release with one big lesson — a compiler bug that produces wrong code silently is worse than one that fails loudly. One command, rustup update stable, closes it.

Follow World Tech on TechByCountry for tomorrow's update.

📸 Get tech in the last 24 hours on Instagram — follow @_techinlast24hrs for daily posts (9 AM–9 PM) and reels at 12:30 PM & 8:30 PM.

Sources

Rust Blog — Announcing Rust 1.99.1 (primary source, 15 Oct 2026)
Rust Release Notes — Version 1.99.1 and 1.99.0
PBX Science — Rust 1.99.1 Released: Three Regressions Fixed (16 Oct 2026)
Linux Compatible — Rust 1.99.1 Released: Three Critical Bugs Fixed (Oct 2026)

Related TechByCountry coverage: Python 3.15.2's security release explained, GitHub Copilot's runtime rewritten in Rust, and Cloudflare's tsrs Rust TypeScript compiler explained.

Comments