NewsOpen SourceProgramming Languages

Rust 1.98.1 Fixes Vtable Bug — New Trait Solver on Nightly

Rust crab mascot Ferris surrounded by compiler and security icons on dark blue background
Rust 1.98.1 patches a vtable miscompilation and the next-gen trait solver goes live on nightly

Three significant things happened to Rust in the last two weeks. One can crash your program silently. One will change how the compiler works for every Rust developer on the planet. And one is finally paying the people who build it. Start with the urgent one: run rustup update stable right now if you are on Rust 1.98.0, then come back.

The Vtable Bug: Why 1.98.0 Was Unsafe to Ship

Rust 1.98.0 shipped August 20 with a miscompilation in vtable generation. The compiler would produce a null pointer in a trait object vtable where a function pointer belongs. When your code calls through that vtable slot — which happens transparently whenever you use dyn Trait — you get undefined behavior, and in practice, a segfault. There is no workaround. The only fix is the update.

Rust 1.98.1 landed September 3 with one change: the vtable fix. This is the second safety-critical point release in two consecutive stable cycles — Rust 1.97.1 fixed an LLVM miscompilation in August. Two P-critical patches, two weeks each to ship. Whatever you think about Rust’s complexity, that release infrastructure is exceptional.

Update now:

rustup update stable
rustc --version  # should show rustc 1.98.1 (2026-09-03)

What 1.98.0 Actually Added — Now Safe to Use

The 1.98.0 features are real and worth knowing. C-variadic function definitions are now stable: until now, Rust could call C variadic functions but could not define them. That gap is closed. Combined with the #[unsafe(naked)] attribute, Rust now has complete coverage for low-level FFI patterns previously requiring nightly — a significant unlock for embedded and OS development.

Three other additions are worth noting: 128-bit integer support in inline assembly, algebraic floating-point methods on f32 and f64 (think -ffast-math-style optimizations), and format_into for integers — buffered formatting that performs comparably to the itoa crate without the dependency. Small additions; real savings.

The New Trait Solver: The Biggest Compiler Change Since 1.0

On August 21 — the day after 1.98.0 shipped — the Rust team quietly enabled the next-generation trait solver by default on nightly. This is a more consequential change than the vtable fix, and it has received far less attention outside of compiler-focused circles.

The trait solver is how rustc decides whether a type satisfies a trait bound. The existing implementation has accumulated four years of workarounds, soundness bugs, and deferred complexity. The new solver replaces it entirely — how where-clauses are proved, how associated types are normalized, all of it. More than 200 tracked GitHub issues are fixed by this change alone. The Apache DataFusion crate compiles more than 8x faster under the new solver. That is not a typo.

The catches: bevy_ecs, minijinja, tera, and sparsey currently fail to compile on nightly due to higher-ranked associated type handling that the new solver correctly rejects. These are programs that the old solver accepted through incorrect inference — the new solver is right to reject them, but the crate maintainers need to fix the code. If you use any of these dependencies, check the breakage tracking issue before upgrading CI to nightly.

Test your crates now, before this hits stable:

# Install nightly if you do not have it
rustup install nightly

# Run a check against the new solver
cargo +nightly check

# If things break and you need to unblock: disable the new solver temporarily
RUSTFLAGS=-Znext-solver=coherence cargo +nightly check

The stabilization timeline is “next months.” Library maintainers who are not testing against nightly will be surprised by their users when it ships to stable. Test now.

Once stabilized, the new solver unblocks Type Alias Impl Trait, Return Type Notation, new implicit default trait bounds, and the remaining type system soundness fixes that have been deferred for years. This is the foundation for the next chapter of Rust’s type system.

The Maintainers in Residence: Who Actually Built This

On August 26, the Rust Foundation announced the inaugural Maintainers in Residence cohort — six contributors funded for 12 months from a $350,000 pool backed by Google, AWS, and OpenAI. The positions cover rustup, Clippy, the compiler, the standard library, rustdoc, and Windows support.

The four-year arc of the next-gen trait solver is not an anomaly — it is the normal pace of deep compiler work done by maintainers who have day jobs. The MiR program is the first institutional acknowledgment that Rust’s core infrastructure needs dedicated capacity. If the program scales — and at $350K for six people, there is substantial room to grow — future compiler improvements will come faster.

Three Things to Do Before Monday

  1. Update to 1.98.1rustup update stable. If you are on 1.98.0, you have a live miscompilation risk. This takes 30 seconds.
  2. Test your crates on nightlycargo +nightly check. The trait solver hits stable within months. Find your breakage now, not then.
  3. Check the breakage tracker if nightly fails. Your issue is probably already filed. If it is not, report it — the Rust team is actively triaging.
ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *

    More in:News