Rust 1.99.0 Stabilizes C-Variadic Functions and Adds a Cargo Debug Profile
Software / news
Rust 1.99.0 Stabilizes C-Variadic Functions and Adds a Cargo Debug Profile
The Oct. 1 release also turns off incremental compilation by default in CI and makes no_mangle_generic_items a hard error.

Rust 1.99.0 shipped on Oct. 1 with C-ABI variadic functions stable, so a Rust function can be declared with the "C" or "C-unwind" ABI and accept a variable argument list. The release also changes what Cargo does in CI and turns one lint into a hard error.
The announcement comes from the Rust Release Team on the Rust Blog. The changelog detail below is from releases.rs, which tracks each version.
What Rust 1.99.0 stabilizes
Variadic functions are the headline. The argument list is represented by core::ffi::VaList, which the blog says stays "ABI-compatible with the C va_list type across targets". Reading values out of it is gated by a VaArgSafe trait. The release also stabilizes naked variadic functions with non-"C" ABIs, written with inline assembly.
Three layout functions come out of nightly: Layout::for_value_raw, mem::size_of_val_raw and mem::align_of_val_raw. They return size and alignment from a raw pointer, for both Sized and non-Sized types.
The blog counts 15 newly stable APIs in all. They include Vec::into_parts and Vec::from_parts, Box::into_non_null and Box::from_non_null, VecDeque::retain_back, String::from_utf8_lossy_owned, and std::fs::set_times with its set_times_nofollow sibling. The blog states that no language semantics changed.
The Cargo and compiler changes in 1.99.0
| Area | Change in 1.99.0 | Source |
|---|---|---|
| Compiler | Updated to LLVM 23 | releases.rs |
| Compiler | Static position-independent executables on GNU and musl targets | releases.rs |
| Cargo | New built-in debug profile | releases.rs |
| Cargo | Incremental compilation off by default in CI | releases.rs |
| Platform | riscv64-unknown-linux-musl promoted to Tier 2 with host tools | releases.rs |
| Lint | no_mangle_generic_items upgraded to a hard error | releases.rs |
The CI row is the one that costs somebody a minute on a Monday. A pipeline that kept target/ between runs and counted on incremental rebuilds will start doing full builds of the crate under test. Neither document says how to switch the old behaviour back on.
What breaks on upgrade from 1.98
Four items on the releases.rs list can fail a build or add warnings. The legacy integer modules such as std::i32::MAX are fully deprecated, so code still importing them will warn on every file. Macros that expand to a trailing semicolon now warn even when the macro comes from an external crate, which means a dependency can produce warnings the project cannot fix by editing its own source.
Pin::new_unchecked has modified safety invariants. The blog's note on Box::leak is related in spirit: the documentation now recommends against patterns that later deallocate leaked memory, pointing to Box::into_non_null or Box::into_raw instead. It cites interactions with compiler optimizations and upcoming custom allocators.
Anyone who leaks a box and frees it later through a raw pointer is the person this paragraph is for. The code compiles on 1.99.0, and the documentation now says it should not be written that way.
Test suites that fetch example.com are a different kind of upgrade risk, covered in IANA's change to that page. Projects that vendor a graphics reimplementation such as OpenDLSS-NR should rebuild against 1.99.0 before assuming the new warnings are absent.

What neither source says
The releases.rs entry lists the new debug profile without saying how it differs from the existing dev profile. It also does not say whether the LLVM 23 update changes generated code size or speed, and no benchmark figures accompany either source.
The 1.99.0 notes in the rust-lang repository are the next place to check for the profile settings and the CI override.
Sources
More in Software
- 01Ponytail Hits 151,400 GitHub Stars on a Claim of 54% Less Code, Measured by Its AuthorThe plugin tells coding agents to write the minimum. Its benchmark used Claude Haiku 4.5 on one FastAPI template, four runs per ticket, and its tracker has 98 open issues.
- 02OpenDLSS-NR Reimplements Nvidia's DLSS 5 Network in Vulkan, but You Supply the WeightsThe MIT-licensed repository claims byte-for-byte parity with Nvidia's network, yet ships no weights, so the claim cannot be reproduced from the repo alone.
- 03Mozilla Shuts Down Solo AI Website Builder; All Sites Deleted Nov. 30The export ZIP leaves out image source files, Pro subscribers get prorated refunds from Oct. 1, and Mozilla points users to Wix, Squarespace, WordPress, Bolt and Lovable.
- 04IANA Says Example.com's Animated Redesign Is About Bandwidth, Not LooksKim Davies told a Google engineer the page was split to save bytes on automated traffic. Commenters measured 713 bytes of HTML plus 2.15 kB of script and are not convinced.