You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Upgrade Rust toolchain to nightly-2026-01-14 (#4643)
rust-lang/rust "Explicitly export core and std macros" replaced the
`#[macro_use] extern crate std` prelude injection with explicit macro
re-exports in `std::prelude::v1`. Kani's `library/std` re-exports the
real prelude via `pub use std::*`, so user code began resolving the
*original* `println!`/`assert!`/etc. instead of Kani's `#[macro_export]`
overrides. The real `println!` then pulled its full formatting/I/O
machinery into verification, including an unbounded
`core::slice::memchr::memrchr` loop that made symbolic execution
nonterminating (this is what hung the automated upgrade).
Give Kani's `std` its own `prelude` module (shadowing the
glob-re-exported one) whose `v1` re-exports the std prelude and then
explicitly re-exports Kani's overridden macros (assert, assert_eq,
assert_ne, debug_assert{,_eq,_ne}, print, eprint, println, eprintln,
unreachable, and panic via the same private-module trick std uses).
Explicit imports take precedence over the globs, so only the overridden
macros are replaced. The edition submodules re-export their overrides
explicitly to resolve the otherwise-ambiguous v1-vs-core glob imports.
By submitting this pull request, I confirm that my contribution is made
under the terms of the Apache 2.0 and MIT licenses.
Co-authored-by: Kiro <kiro-agent@users.noreply.github.com>
0 commit comments