Version-locked crates break the fallback resolver
Author: cuviperCreated Jul 24, 2026Updated Jul 24, 2026
serde_core is version-locked to the same serde_derive via target.'cfg(any())'.dependencies. This is fine in theory, but they currently have different rust-version support, and Cargo's fallback resolver appears to be too greedy.
$ cargo +1.70.0 new hello
Created binary (application) `hello` package
$ cd hello/
$ sed -i '/^edition/a rust-version = "1.70"' Cargo.toml
$ cargo +1.70.0 add serde_core@1 serde_derive@1
Updating crates.io index
Adding serde_core v1 to dependencies.
Features as of v1.0.220:
+ result
+ std
- alloc
- rc
- unstable
Adding serde_derive v1 to dependencies.
Updating crates.io index
$ CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=fallback cargo +stable generate-lockfile
Updating crates.io index
Locking 6 packages to latest Rust 1.70 compatible versions
Adding proc-macro2 v1.0.106 (available: v1.0.107, requires Rust 1.71)
Adding quote v1.0.44 (available: v1.0.47, requires Rust 1.71)
Adding serde_derive v1.0.229 (requires Rust 1.71)
Adding syn v3.0.3 (requires Rust 1.71)
Adding unicode-ident v1.0.22 (available: v1.0.24, requires Rust 1.71)
$ cargo +1.70.0 check
error: package `syn v3.0.3` cannot be built because it requires rustc 1.71 or newer, while the currently active rustc version is 1.70.0
Either upgrade to rustc 1.71 or newer, or use
cargo update -p [email protected] --precise ver
where `ver` is the latest version of `syn` supporting rustc 1.70.0I have to manually downgrade serde_core, still using the fallback resolver to limit syn:
$ CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=fallback cargo +stable update -p serde_core --precise 1.0.228
Updating crates.io index
Downgrading serde_core v1.0.229 -> v1.0.228
Downgrading serde_derive v1.0.229 -> v1.0.228 (available: v1.0.229, requires Rust 1.71)
Downgrading syn v3.0.3 -> v2.0.114 (available: v2.0.119, requires Rust 1.71)
note: pass `--verbose` to see 3 unchanged dependencies behind latest
$ cargo +1.70.0 check
Compiling proc-macro2 v1.0.106
Compiling quote v1.0.44
Compiling unicode-ident v1.0.22
Compiling serde_core v1.0.228
Compiling syn v2.0.114
Compiling serde_derive v1.0.228
Checking hello v0.1.0 ([...]/hello)
Finished dev [unoptimized + debuginfo] target(s) in 1.77sSource: serde-rs/serde