Skip to content

dependency feature confusion when using bindeps #16198

@YtvwlD

Description

@YtvwlD

I am developing a bootloader and writing integration tests for it.

The project structure roughly looks like this:

├── Cargo.lock
├── Cargo.toml
├── bootloader
│   ├── Cargo.toml
│   ├── build.rs
│   └── src
│       └── main.rs
├── rust-toolchain.toml
└── tests
    ├── Cargo.toml
    └── src
        └── lib.rs

(There is more code obviously, I tried to create a minimal example.)

The bootloader crate has the following dependencies:

[dependencies]
serde = { version = "1.0", default-features = false, features = ["derive"] }

[build-dependencies]
url = "2.5"

(In reality, there are more and url is pulled in by built, but to keep it brief, that's enough.)

The tests depend on the bootloader crate:

[dependencies]
bootloader = { path = "../bootloader", artifact = "bin", target = "i686-unknown-uefi" }

(For this to work, .config/cargo.toml contains [unstable] bindeps = true.)

This has worked for quite some time and it works for url 2.5.6:

cargo build --target=i686-unknown-uefi -p bootloader
cargo test -p tests

These are the full dependencies for this minimal example:

$ cargo tree --edges features
bootloader v0.1.0 (/home/ubuntu/dev/url-dep/bootloader)
└── serde feature "derive"
    ├── serde v1.0.228
    │   ├── serde_core feature "result"
    │   │   └── serde_core v1.0.228
    │   └── serde_derive feature "default"
    │       └── serde_derive v1.0.228 (proc-macro)
    │           ├── proc-macro2 feature "proc-macro"
    │           │   └── proc-macro2 v1.0.103
    │           │       └── unicode-ident feature "default"
    │           │           └── unicode-ident v1.0.20
    │           ├── quote feature "proc-macro"
    │           │   ├── quote v1.0.41
    │           │   │   └── proc-macro2 v1.0.103 (*)
    │           │   └── proc-macro2 feature "proc-macro" (*)
    │           ├── syn feature "clone-impls"
    │           │   └── syn v2.0.108
    │           │       ├── proc-macro2 v1.0.103 (*)
    │           │       ├── quote v1.0.41 (*)
    │           │       └── unicode-ident feature "default" (*)
    │           ├── syn feature "derive"
    │           │   └── syn v2.0.108 (*)
    │           ├── syn feature "parsing"
    │           │   └── syn v2.0.108 (*)
    │           ├── syn feature "printing"
    │           │   └── syn v2.0.108 (*)
    │           └── syn feature "proc-macro"
    │               ├── syn v2.0.108 (*)
    │               ├── proc-macro2 feature "proc-macro" (*)
    │               └── quote feature "proc-macro" (*)
    └── serde feature "serde_derive"
        └── serde v1.0.228 (*)
[build-dependencies]
└── url feature "default"
    ├── url v2.5.6
    │   ├── form_urlencoded feature "alloc"
    │   │   ├── form_urlencoded v1.2.2
    │   │   │   └── percent-encoding v2.3.2
    │   │   └── percent-encoding feature "alloc"
    │   │       └── percent-encoding v2.3.2
    │   ├── percent-encoding feature "alloc" (*)
    │   ├── idna feature "alloc"
    │   │   └── idna v1.1.0
    │   │       ├── idna_adapter feature "default"
    │   │       │   └── idna_adapter v1.2.1
    │   │       │       ├── icu_normalizer v2.1.1
    │   │       │       │   ├── icu_collections v2.1.1
    │   │       │       │   │   ├── displaydoc v0.2.5 (proc-macro)
    │   │       │       │   │   │   ├── proc-macro2 feature "default"
    │   │       │       │   │   │   │   ├── proc-macro2 v1.0.103 (*)
    │   │       │       │   │   │   │   └── proc-macro2 feature "proc-macro" (*)
    │   │       │       │   │   │   ├── quote feature "default"
    │   │       │       │   │   │   │   ├── quote v1.0.41 (*)
    │   │       │       │   │   │   │   └── quote feature "proc-macro" (*)
    │   │       │       │   │   │   └── syn feature "default"
    │   │       │       │   │   │       ├── syn v2.0.108 (*)
    │   │       │       │   │   │       ├── syn feature "clone-impls" (*)
    │   │       │       │   │   │       ├── syn feature "derive" (*)
    │   │       │       │   │   │       ├── syn feature "parsing" (*)
    │   │       │       │   │   │       ├── syn feature "printing" (*)
    │   │       │       │   │   │       └── syn feature "proc-macro" (*)
    │   │       │       │   │   ├── potential_utf feature "zerovec"
    │   │       │       │   │   │   └── potential_utf v0.1.4
    │   │       │       │   │   │       └── zerovec v0.11.5
    │   │       │       │   │   │           ├── yoke v0.8.1
    │   │       │       │   │   │           │   ├── stable_deref_trait v1.2.1
    │   │       │       │   │   │           │   ├── yoke-derive v0.8.1 (proc-macro)
    │   │       │       │   │   │           │   │   ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │           │   │   ├── quote feature "default" (*)
    │   │       │       │   │   │           │   │   ├── syn feature "default" (*)
    │   │       │       │   │   │           │   │   ├── syn feature "fold"
    │   │       │       │   │   │           │   │   │   └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │   └── synstructure feature "default"
    │   │       │       │   │   │           │   │       ├── synstructure v0.13.2
    │   │       │       │   │   │           │   │       │   ├── proc-macro2 v1.0.103 (*)
    │   │       │       │   │   │           │   │       │   ├── quote v1.0.41 (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "clone-impls" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "derive" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "extra-traits"
    │   │       │       │   │   │           │   │       │   │   └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "parsing" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "printing" (*)
    │   │       │       │   │   │           │   │       │   └── syn feature "visit"
    │   │       │       │   │   │           │   │       │       └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │       └── synstructure feature "proc-macro"
    │   │       │       │   │   │           │   │           ├── synstructure v0.13.2 (*)
    │   │       │       │   │   │           │   │           ├── proc-macro2 feature "proc-macro" (*)
    │   │       │       │   │   │           │   │           ├── quote feature "proc-macro" (*)
    │   │       │       │   │   │           │   │           └── syn feature "proc-macro" (*)
    │   │       │       │   │   │           │   └── zerofrom v0.1.6
    │   │       │       │   │   │           │       └── zerofrom-derive v0.1.6 (proc-macro)
    │   │       │       │   │   │           │           ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │           │           ├── quote feature "default" (*)
    │   │       │       │   │   │           │           ├── syn feature "default" (*)
    │   │       │       │   │   │           │           ├── syn feature "fold" (*)
    │   │       │       │   │   │           │           └── synstructure feature "default" (*)
    │   │       │       │   │   │           ├── zerofrom v0.1.6 (*)
    │   │       │       │   │   │           └── zerovec-derive v0.11.2 (proc-macro)
    │   │       │       │   │   │               ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │               ├── quote feature "default" (*)
    │   │       │       │   │   │               ├── syn feature "default" (*)
    │   │       │       │   │   │               └── syn feature "extra-traits" (*)
    │   │       │       │   │   ├── zerovec feature "derive"
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── zerovec feature "yoke"
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── yoke feature "derive"
    │   │       │       │   │   │   ├── yoke v0.8.1 (*)
    │   │       │       │   │   │   ├── yoke feature "zerofrom"
    │   │       │       │   │   │   │   └── yoke v0.8.1 (*)
    │   │       │       │   │   │   └── zerofrom feature "derive"
    │   │       │       │   │   │       └── zerofrom v0.1.6 (*)
    │   │       │       │   │   └── zerofrom feature "derive" (*)
    │   │       │       │   ├── icu_normalizer_data v2.1.1
    │   │       │       │   ├── icu_provider v2.1.1
    │   │       │       │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   ├── icu_locale_core v2.1.1
    │   │       │       │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   ├── litemap v0.8.1
    │   │       │       │   │   │   ├── tinystr v0.8.2
    │   │       │       │   │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   │   ├── writeable v0.6.2
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── writeable v0.6.2
    │   │       │       │   │   ├── zerotrie v0.2.3
    │   │       │       │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   ├── zerofrom v0.1.6 (*)
    │   │       │       │   │   │   └── yoke feature "derive" (*)
    │   │       │       │   │   ├── zerovec feature "derive" (*)
    │   │       │       │   │   ├── yoke feature "derive" (*)
    │   │       │       │   │   └── zerofrom feature "derive" (*)
    │   │       │       │   ├── smallvec v1.15.1
    │   │       │       │   └── zerovec v0.11.5 (*)
    │   │       │       └── icu_properties v2.1.1
    │   │       │           ├── icu_collections v2.1.1 (*)
    │   │       │           ├── icu_properties_data v2.1.1
    │   │       │           ├── icu_provider v2.1.1 (*)
    │   │       │           ├── zerovec feature "derive" (*)
    │   │       │           ├── zerovec feature "yoke" (*)
    │   │       │           ├── icu_locale_core feature "zerovec"
    │   │       │           │   ├── icu_locale_core v2.1.1 (*)
    │   │       │           │   └── tinystr feature "zerovec"
    │   │       │           │       └── tinystr v0.8.2 (*)
    │   │       │           ├── zerotrie feature "yoke"
    │   │       │           │   └── zerotrie v0.2.3 (*)
    │   │       │           └── zerotrie feature "zerofrom"
    │   │       │               └── zerotrie v0.2.3 (*)
    │   │       ├── smallvec feature "const_generics"
    │   │       │   └── smallvec v1.15.1
    │   │       ├── smallvec feature "default"
    │   │       │   └── smallvec v1.15.1
    │   │       └── utf8_iter feature "default"
    │   │           └── utf8_iter v1.0.4
    │   └── idna feature "compiled_data"
    │       ├── idna v1.1.0 (*)
    │       └── idna_adapter feature "compiled_data"
    │           ├── idna_adapter v1.2.1 (*)
    │           ├── icu_normalizer feature "compiled_data"
    │           │   ├── icu_normalizer v2.1.1 (*)
    │           │   └── icu_provider feature "baked"
    │           │       └── icu_provider v2.1.1 (*)
    │           └── icu_properties feature "compiled_data"
    │               ├── icu_properties v2.1.1 (*)
    │               └── icu_provider feature "baked" (*)
    └── url feature "std"
        ├── url v2.5.6 (*)
        ├── form_urlencoded feature "std"
        │   ├── form_urlencoded v1.2.2 (*)
        │   ├── form_urlencoded feature "alloc" (*)
        │   └── percent-encoding feature "std"
        │       ├── percent-encoding v2.3.2
        │       └── percent-encoding feature "alloc" (*)
        ├── percent-encoding feature "std" (*)
        └── idna feature "std"
            ├── idna v1.1.0 (*)
            └── idna feature "alloc" (*)

bootloader v0.1.0 (/home/ubuntu/dev/url-dep/bootloader)
└── serde feature "derive"
    ├── serde v1.0.228
    │   ├── serde_core feature "result"
    │   │   └── serde_core v1.0.228
    │   └── serde_derive feature "default"
    │       └── serde_derive v1.0.228 (proc-macro)
    │           ├── proc-macro2 feature "proc-macro"
    │           │   └── proc-macro2 v1.0.103
    │           │       └── unicode-ident feature "default"
    │           │           └── unicode-ident v1.0.20
    │           ├── quote feature "proc-macro"
    │           │   ├── quote v1.0.41
    │           │   │   └── proc-macro2 v1.0.103 (*)
    │           │   └── proc-macro2 feature "proc-macro" (*)
    │           ├── syn feature "clone-impls"
    │           │   └── syn v2.0.108
    │           │       ├── proc-macro2 v1.0.103 (*)
    │           │       ├── quote v1.0.41 (*)
    │           │       └── unicode-ident feature "default" (*)
    │           ├── syn feature "derive"
    │           │   └── syn v2.0.108 (*)
    │           ├── syn feature "parsing"
    │           │   └── syn v2.0.108 (*)
    │           ├── syn feature "printing"
    │           │   └── syn v2.0.108 (*)
    │           └── syn feature "proc-macro"
    │               ├── syn v2.0.108 (*)
    │               ├── proc-macro2 feature "proc-macro" (*)
    │               └── quote feature "proc-macro" (*)
    └── serde feature "serde_derive"
        └── serde v1.0.228 (*)
[build-dependencies]
└── url feature "default"
    ├── url v2.5.6
    │   ├── form_urlencoded feature "alloc"
    │   │   ├── form_urlencoded v1.2.2
    │   │   │   └── percent-encoding v2.3.2
    │   │   └── percent-encoding feature "alloc"
    │   │       └── percent-encoding v2.3.2
    │   ├── percent-encoding feature "alloc" (*)
    │   ├── idna feature "alloc"
    │   │   └── idna v1.1.0
    │   │       ├── idna_adapter feature "default"
    │   │       │   └── idna_adapter v1.2.1
    │   │       │       ├── icu_normalizer v2.1.1
    │   │       │       │   ├── icu_collections v2.1.1
    │   │       │       │   │   ├── displaydoc v0.2.5 (proc-macro)
    │   │       │       │   │   │   ├── proc-macro2 feature "default"
    │   │       │       │   │   │   │   ├── proc-macro2 v1.0.103 (*)
    │   │       │       │   │   │   │   └── proc-macro2 feature "proc-macro" (*)
    │   │       │       │   │   │   ├── quote feature "default"
    │   │       │       │   │   │   │   ├── quote v1.0.41 (*)
    │   │       │       │   │   │   │   └── quote feature "proc-macro" (*)
    │   │       │       │   │   │   └── syn feature "default"
    │   │       │       │   │   │       ├── syn v2.0.108 (*)
    │   │       │       │   │   │       ├── syn feature "clone-impls" (*)
    │   │       │       │   │   │       ├── syn feature "derive" (*)
    │   │       │       │   │   │       ├── syn feature "parsing" (*)
    │   │       │       │   │   │       ├── syn feature "printing" (*)
    │   │       │       │   │   │       └── syn feature "proc-macro" (*)
    │   │       │       │   │   ├── potential_utf feature "zerovec"
    │   │       │       │   │   │   └── potential_utf v0.1.4
    │   │       │       │   │   │       └── zerovec v0.11.5
    │   │       │       │   │   │           ├── yoke v0.8.1
    │   │       │       │   │   │           │   ├── stable_deref_trait v1.2.1
    │   │       │       │   │   │           │   ├── yoke-derive v0.8.1 (proc-macro)
    │   │       │       │   │   │           │   │   ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │           │   │   ├── quote feature "default" (*)
    │   │       │       │   │   │           │   │   ├── syn feature "default" (*)
    │   │       │       │   │   │           │   │   ├── syn feature "fold"
    │   │       │       │   │   │           │   │   │   └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │   └── synstructure feature "default"
    │   │       │       │   │   │           │   │       ├── synstructure v0.13.2
    │   │       │       │   │   │           │   │       │   ├── proc-macro2 v1.0.103 (*)
    │   │       │       │   │   │           │   │       │   ├── quote v1.0.41 (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "clone-impls" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "derive" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "extra-traits"
    │   │       │       │   │   │           │   │       │   │   └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "parsing" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "printing" (*)
    │   │       │       │   │   │           │   │       │   └── syn feature "visit"
    │   │       │       │   │   │           │   │       │       └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │       └── synstructure feature "proc-macro"
    │   │       │       │   │   │           │   │           ├── synstructure v0.13.2 (*)
    │   │       │       │   │   │           │   │           ├── proc-macro2 feature "proc-macro" (*)
    │   │       │       │   │   │           │   │           ├── quote feature "proc-macro" (*)
    │   │       │       │   │   │           │   │           └── syn feature "proc-macro" (*)
    │   │       │       │   │   │           │   └── zerofrom v0.1.6
    │   │       │       │   │   │           │       └── zerofrom-derive v0.1.6 (proc-macro)
    │   │       │       │   │   │           │           ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │           │           ├── quote feature "default" (*)
    │   │       │       │   │   │           │           ├── syn feature "default" (*)
    │   │       │       │   │   │           │           ├── syn feature "fold" (*)
    │   │       │       │   │   │           │           └── synstructure feature "default" (*)
    │   │       │       │   │   │           ├── zerofrom v0.1.6 (*)
    │   │       │       │   │   │           └── zerovec-derive v0.11.2 (proc-macro)
    │   │       │       │   │   │               ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │               ├── quote feature "default" (*)
    │   │       │       │   │   │               ├── syn feature "default" (*)
    │   │       │       │   │   │               └── syn feature "extra-traits" (*)
    │   │       │       │   │   ├── zerovec feature "derive"
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── zerovec feature "yoke"
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── yoke feature "derive"
    │   │       │       │   │   │   ├── yoke v0.8.1 (*)
    │   │       │       │   │   │   ├── yoke feature "zerofrom"
    │   │       │       │   │   │   │   └── yoke v0.8.1 (*)
    │   │       │       │   │   │   └── zerofrom feature "derive"
    │   │       │       │   │   │       └── zerofrom v0.1.6 (*)
    │   │       │       │   │   └── zerofrom feature "derive" (*)
    │   │       │       │   ├── icu_normalizer_data v2.1.1
    │   │       │       │   ├── icu_provider v2.1.1
    │   │       │       │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   ├── icu_locale_core v2.1.1
    │   │       │       │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   ├── litemap v0.8.1
    │   │       │       │   │   │   ├── tinystr v0.8.2
    │   │       │       │   │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   │   ├── writeable v0.6.2
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── writeable v0.6.2
    │   │       │       │   │   ├── zerotrie v0.2.3
    │   │       │       │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   ├── zerofrom v0.1.6 (*)
    │   │       │       │   │   │   └── yoke feature "derive" (*)
    │   │       │       │   │   ├── zerovec feature "derive" (*)
    │   │       │       │   │   ├── yoke feature "derive" (*)
    │   │       │       │   │   └── zerofrom feature "derive" (*)
    │   │       │       │   ├── smallvec v1.15.1
    │   │       │       │   └── zerovec v0.11.5 (*)
    │   │       │       └── icu_properties v2.1.1
    │   │       │           ├── icu_collections v2.1.1 (*)
    │   │       │           ├── icu_properties_data v2.1.1
    │   │       │           ├── icu_provider v2.1.1 (*)
    │   │       │           ├── zerovec feature "derive" (*)
    │   │       │           ├── zerovec feature "yoke" (*)
    │   │       │           ├── icu_locale_core feature "zerovec"
    │   │       │           │   ├── icu_locale_core v2.1.1 (*)
    │   │       │           │   └── tinystr feature "zerovec"
    │   │       │           │       └── tinystr v0.8.2 (*)
    │   │       │           ├── zerotrie feature "yoke"
    │   │       │           │   └── zerotrie v0.2.3 (*)
    │   │       │           └── zerotrie feature "zerofrom"
    │   │       │               └── zerotrie v0.2.3 (*)
    │   │       ├── smallvec feature "const_generics"
    │   │       │   └── smallvec v1.15.1
    │   │       ├── smallvec feature "default"
    │   │       │   └── smallvec v1.15.1
    │   │       └── utf8_iter feature "default"
    │   │           └── utf8_iter v1.0.4
    │   └── idna feature "compiled_data"
    │       ├── idna v1.1.0 (*)
    │       └── idna_adapter feature "compiled_data"
    │           ├── idna_adapter v1.2.1 (*)
    │           ├── icu_normalizer feature "compiled_data"
    │           │   ├── icu_normalizer v2.1.1 (*)
    │           │   └── icu_provider feature "baked"
    │           │       └── icu_provider v2.1.1 (*)
    │           └── icu_properties feature "compiled_data"
    │               ├── icu_properties v2.1.1 (*)
    │               └── icu_provider feature "baked" (*)
    └── url feature "std"
        ├── url v2.5.6 (*)
        ├── form_urlencoded feature "std"
        │   ├── form_urlencoded v1.2.2 (*)
        │   ├── form_urlencoded feature "alloc" (*)
        │   └── percent-encoding feature "std"
        │       ├── percent-encoding v2.3.2
        │       └── percent-encoding feature "alloc" (*)
        ├── percent-encoding feature "std" (*)
        └── idna feature "std"
            ├── idna v1.1.0 (*)
            └── idna feature "alloc" (*)

tests v0.1.0 (/home/ubuntu/dev/url-dep/tests)
└── bootloader feature "default"
    └── bootloader v0.1.0 (/home/ubuntu/dev/url-dep/bootloader) (*)

Recently, url 2.5.7 gained a dependency on serde. This should not be a problem, but it is:

$ cargo build --target=i686-unknown-uefi -p bootloader
    Blocking waiting for file lock on build directory
   Compiling serde_core v1.0.228
   Compiling serde v1.0.228
   Compiling url v2.5.7
   Compiling bootloader v0.1.0 (/home/ubuntu/dev/url-dep/bootloader)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.60s
$ cargo test -p tests
   Compiling bootloader v0.1.0 (/home/ubuntu/dev/url-dep/bootloader)
error[E0152]: found duplicate lang item `panic_impl`
  --> bootloader/src/main.rs:18:1
   |
18 | / fn panic_handler(_info: &PanicInfo) -> ! {
19 | |     loop {}
20 | | }
   | |_^
   |
   = note: the lang item is first defined in crate `std` (which `serde` depends on)
   = note: first definition in `std` loaded from /home/ubuntu/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/i686-unknown-uefi/lib/libstd-2689399c1fe40c87.rlib
   = note: second definition in the local crate (`bootloader`)

For more information about this error, try `rustc --explain E0152`.
error: could not compile `bootloader` (bin "bootloader") due to 1 previous error

Full dependencies:

$ cargo tree --edges features
bootloader v0.1.0 (/home/ubuntu/dev/url-dep/bootloader)
└── serde feature "derive"
    ├── serde v1.0.228
    │   ├── serde_core feature "result"
    │   │   └── serde_core v1.0.228
    │   └── serde_derive feature "default"
    │       └── serde_derive v1.0.228 (proc-macro)
    │           ├── proc-macro2 feature "proc-macro"
    │           │   └── proc-macro2 v1.0.103
    │           │       └── unicode-ident feature "default"
    │           │           └── unicode-ident v1.0.20
    │           ├── quote feature "proc-macro"
    │           │   ├── quote v1.0.41
    │           │   │   └── proc-macro2 v1.0.103 (*)
    │           │   └── proc-macro2 feature "proc-macro" (*)
    │           ├── syn feature "clone-impls"
    │           │   └── syn v2.0.108
    │           │       ├── proc-macro2 v1.0.103 (*)
    │           │       ├── quote v1.0.41 (*)
    │           │       └── unicode-ident feature "default" (*)
    │           ├── syn feature "derive"
    │           │   └── syn v2.0.108 (*)
    │           ├── syn feature "parsing"
    │           │   └── syn v2.0.108 (*)
    │           ├── syn feature "printing"
    │           │   └── syn v2.0.108 (*)
    │           └── syn feature "proc-macro"
    │               ├── syn v2.0.108 (*)
    │               ├── proc-macro2 feature "proc-macro" (*)
    │               └── quote feature "proc-macro" (*)
    └── serde feature "serde_derive"
        └── serde v1.0.228 (*)
[build-dependencies]
└── url feature "default"
    ├── url v2.5.7
    │   ├── form_urlencoded feature "alloc"
    │   │   ├── form_urlencoded v1.2.2
    │   │   │   └── percent-encoding v2.3.2
    │   │   └── percent-encoding feature "alloc"
    │   │       └── percent-encoding v2.3.2
    │   ├── percent-encoding feature "alloc" (*)
    │   ├── idna feature "alloc"
    │   │   └── idna v1.1.0
    │   │       ├── idna_adapter feature "default"
    │   │       │   └── idna_adapter v1.2.1
    │   │       │       ├── icu_normalizer v2.1.1
    │   │       │       │   ├── icu_collections v2.1.1
    │   │       │       │   │   ├── displaydoc v0.2.5 (proc-macro)
    │   │       │       │   │   │   ├── proc-macro2 feature "default"
    │   │       │       │   │   │   │   ├── proc-macro2 v1.0.103 (*)
    │   │       │       │   │   │   │   └── proc-macro2 feature "proc-macro" (*)
    │   │       │       │   │   │   ├── quote feature "default"
    │   │       │       │   │   │   │   ├── quote v1.0.41 (*)
    │   │       │       │   │   │   │   └── quote feature "proc-macro" (*)
    │   │       │       │   │   │   └── syn feature "default"
    │   │       │       │   │   │       ├── syn v2.0.108 (*)
    │   │       │       │   │   │       ├── syn feature "clone-impls" (*)
    │   │       │       │   │   │       ├── syn feature "derive" (*)
    │   │       │       │   │   │       ├── syn feature "parsing" (*)
    │   │       │       │   │   │       ├── syn feature "printing" (*)
    │   │       │       │   │   │       └── syn feature "proc-macro" (*)
    │   │       │       │   │   ├── potential_utf feature "zerovec"
    │   │       │       │   │   │   └── potential_utf v0.1.4
    │   │       │       │   │   │       └── zerovec v0.11.5
    │   │       │       │   │   │           ├── yoke v0.8.1
    │   │       │       │   │   │           │   ├── stable_deref_trait v1.2.1
    │   │       │       │   │   │           │   ├── yoke-derive v0.8.1 (proc-macro)
    │   │       │       │   │   │           │   │   ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │           │   │   ├── quote feature "default" (*)
    │   │       │       │   │   │           │   │   ├── syn feature "default" (*)
    │   │       │       │   │   │           │   │   ├── syn feature "fold"
    │   │       │       │   │   │           │   │   │   └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │   └── synstructure feature "default"
    │   │       │       │   │   │           │   │       ├── synstructure v0.13.2
    │   │       │       │   │   │           │   │       │   ├── proc-macro2 v1.0.103 (*)
    │   │       │       │   │   │           │   │       │   ├── quote v1.0.41 (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "clone-impls" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "derive" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "extra-traits"
    │   │       │       │   │   │           │   │       │   │   └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "parsing" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "printing" (*)
    │   │       │       │   │   │           │   │       │   └── syn feature "visit"
    │   │       │       │   │   │           │   │       │       └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │       └── synstructure feature "proc-macro"
    │   │       │       │   │   │           │   │           ├── synstructure v0.13.2 (*)
    │   │       │       │   │   │           │   │           ├── proc-macro2 feature "proc-macro" (*)
    │   │       │       │   │   │           │   │           ├── quote feature "proc-macro" (*)
    │   │       │       │   │   │           │   │           └── syn feature "proc-macro" (*)
    │   │       │       │   │   │           │   └── zerofrom v0.1.6
    │   │       │       │   │   │           │       └── zerofrom-derive v0.1.6 (proc-macro)
    │   │       │       │   │   │           │           ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │           │           ├── quote feature "default" (*)
    │   │       │       │   │   │           │           ├── syn feature "default" (*)
    │   │       │       │   │   │           │           ├── syn feature "fold" (*)
    │   │       │       │   │   │           │           └── synstructure feature "default" (*)
    │   │       │       │   │   │           ├── zerofrom v0.1.6 (*)
    │   │       │       │   │   │           └── zerovec-derive v0.11.2 (proc-macro)
    │   │       │       │   │   │               ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │               ├── quote feature "default" (*)
    │   │       │       │   │   │               ├── syn feature "default" (*)
    │   │       │       │   │   │               └── syn feature "extra-traits" (*)
    │   │       │       │   │   ├── zerovec feature "derive"
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── zerovec feature "yoke"
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── yoke feature "derive"
    │   │       │       │   │   │   ├── yoke v0.8.1 (*)
    │   │       │       │   │   │   ├── yoke feature "zerofrom"
    │   │       │       │   │   │   │   └── yoke v0.8.1 (*)
    │   │       │       │   │   │   └── zerofrom feature "derive"
    │   │       │       │   │   │       └── zerofrom v0.1.6 (*)
    │   │       │       │   │   └── zerofrom feature "derive" (*)
    │   │       │       │   ├── icu_normalizer_data v2.1.1
    │   │       │       │   ├── icu_provider v2.1.1
    │   │       │       │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   ├── icu_locale_core v2.1.1
    │   │       │       │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   ├── litemap v0.8.1
    │   │       │       │   │   │   ├── tinystr v0.8.2
    │   │       │       │   │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   │   ├── writeable v0.6.2
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── writeable v0.6.2
    │   │       │       │   │   ├── zerotrie v0.2.3
    │   │       │       │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   ├── zerofrom v0.1.6 (*)
    │   │       │       │   │   │   └── yoke feature "derive" (*)
    │   │       │       │   │   ├── zerovec feature "derive" (*)
    │   │       │       │   │   ├── yoke feature "derive" (*)
    │   │       │       │   │   └── zerofrom feature "derive" (*)
    │   │       │       │   ├── smallvec v1.15.1
    │   │       │       │   └── zerovec v0.11.5 (*)
    │   │       │       └── icu_properties v2.1.1
    │   │       │           ├── icu_collections v2.1.1 (*)
    │   │       │           ├── icu_properties_data v2.1.1
    │   │       │           ├── icu_provider v2.1.1 (*)
    │   │       │           ├── zerovec feature "derive" (*)
    │   │       │           ├── zerovec feature "yoke" (*)
    │   │       │           ├── icu_locale_core feature "zerovec"
    │   │       │           │   ├── icu_locale_core v2.1.1 (*)
    │   │       │           │   └── tinystr feature "zerovec"
    │   │       │           │       └── tinystr v0.8.2 (*)
    │   │       │           ├── zerotrie feature "yoke"
    │   │       │           │   └── zerotrie v0.2.3 (*)
    │   │       │           └── zerotrie feature "zerofrom"
    │   │       │               └── zerotrie v0.2.3 (*)
    │   │       ├── smallvec feature "const_generics"
    │   │       │   └── smallvec v1.15.1
    │   │       ├── smallvec feature "default"
    │   │       │   └── smallvec v1.15.1
    │   │       └── utf8_iter feature "default"
    │   │           └── utf8_iter v1.0.4
    │   ├── idna feature "compiled_data"
    │   │   ├── idna v1.1.0 (*)
    │   │   └── idna_adapter feature "compiled_data"
    │   │       ├── idna_adapter v1.2.1 (*)
    │   │       ├── icu_normalizer feature "compiled_data"
    │   │       │   ├── icu_normalizer v2.1.1 (*)
    │   │       │   └── icu_provider feature "baked"
    │   │       │       └── icu_provider v2.1.1 (*)
    │   │       └── icu_properties feature "compiled_data"
    │   │           ├── icu_properties v2.1.1 (*)
    │   │           └── icu_provider feature "baked" (*)
    │   └── serde feature "derive"
    │       ├── serde v1.0.228
    │       │   ├── serde_derive feature "default" (*)
    │       │   └── serde_core feature "result"
    │       │       └── serde_core v1.0.228
    │       └── serde feature "serde_derive"
    │           └── serde v1.0.228 (*)
    └── url feature "std"
        ├── url v2.5.7 (*)
        ├── url feature "serde"
        │   └── url v2.5.7 (*)
        ├── form_urlencoded feature "std"
        │   ├── form_urlencoded v1.2.2 (*)
        │   ├── form_urlencoded feature "alloc" (*)
        │   └── percent-encoding feature "std"
        │       ├── percent-encoding v2.3.2
        │       └── percent-encoding feature "alloc" (*)
        ├── percent-encoding feature "std" (*)
        ├── idna feature "std"
        │   ├── idna v1.1.0 (*)
        │   └── idna feature "alloc" (*)
        └── serde feature "std"
            ├── serde v1.0.228 (*)
            └── serde_core feature "std"
                └── serde_core v1.0.228

bootloader v0.1.0 (/home/ubuntu/dev/url-dep/bootloader)
└── serde feature "derive"
    ├── serde v1.0.228
    │   ├── serde_core feature "result"
    │   │   └── serde_core v1.0.228
    │   └── serde_derive feature "default"
    │       └── serde_derive v1.0.228 (proc-macro)
    │           ├── proc-macro2 feature "proc-macro"
    │           │   └── proc-macro2 v1.0.103
    │           │       └── unicode-ident feature "default"
    │           │           └── unicode-ident v1.0.20
    │           ├── quote feature "proc-macro"
    │           │   ├── quote v1.0.41
    │           │   │   └── proc-macro2 v1.0.103 (*)
    │           │   └── proc-macro2 feature "proc-macro" (*)
    │           ├── syn feature "clone-impls"
    │           │   └── syn v2.0.108
    │           │       ├── proc-macro2 v1.0.103 (*)
    │           │       ├── quote v1.0.41 (*)
    │           │       └── unicode-ident feature "default" (*)
    │           ├── syn feature "derive"
    │           │   └── syn v2.0.108 (*)
    │           ├── syn feature "parsing"
    │           │   └── syn v2.0.108 (*)
    │           ├── syn feature "printing"
    │           │   └── syn v2.0.108 (*)
    │           └── syn feature "proc-macro"
    │               ├── syn v2.0.108 (*)
    │               ├── proc-macro2 feature "proc-macro" (*)
    │               └── quote feature "proc-macro" (*)
    └── serde feature "serde_derive"
        └── serde v1.0.228 (*)
[build-dependencies]
└── url feature "default"
    ├── url v2.5.7
    │   ├── serde feature "derive" (*)
    │   ├── form_urlencoded feature "alloc"
    │   │   ├── form_urlencoded v1.2.2
    │   │   │   └── percent-encoding v2.3.2
    │   │   └── percent-encoding feature "alloc"
    │   │       └── percent-encoding v2.3.2
    │   ├── percent-encoding feature "alloc" (*)
    │   ├── idna feature "alloc"
    │   │   └── idna v1.1.0
    │   │       ├── idna_adapter feature "default"
    │   │       │   └── idna_adapter v1.2.1
    │   │       │       ├── icu_normalizer v2.1.1
    │   │       │       │   ├── icu_collections v2.1.1
    │   │       │       │   │   ├── displaydoc v0.2.5 (proc-macro)
    │   │       │       │   │   │   ├── proc-macro2 feature "default"
    │   │       │       │   │   │   │   ├── proc-macro2 v1.0.103 (*)
    │   │       │       │   │   │   │   └── proc-macro2 feature "proc-macro" (*)
    │   │       │       │   │   │   ├── quote feature "default"
    │   │       │       │   │   │   │   ├── quote v1.0.41 (*)
    │   │       │       │   │   │   │   └── quote feature "proc-macro" (*)
    │   │       │       │   │   │   └── syn feature "default"
    │   │       │       │   │   │       ├── syn v2.0.108 (*)
    │   │       │       │   │   │       ├── syn feature "clone-impls" (*)
    │   │       │       │   │   │       ├── syn feature "derive" (*)
    │   │       │       │   │   │       ├── syn feature "parsing" (*)
    │   │       │       │   │   │       ├── syn feature "printing" (*)
    │   │       │       │   │   │       └── syn feature "proc-macro" (*)
    │   │       │       │   │   ├── potential_utf feature "zerovec"
    │   │       │       │   │   │   └── potential_utf v0.1.4
    │   │       │       │   │   │       └── zerovec v0.11.5
    │   │       │       │   │   │           ├── yoke v0.8.1
    │   │       │       │   │   │           │   ├── stable_deref_trait v1.2.1
    │   │       │       │   │   │           │   ├── yoke-derive v0.8.1 (proc-macro)
    │   │       │       │   │   │           │   │   ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │           │   │   ├── quote feature "default" (*)
    │   │       │       │   │   │           │   │   ├── syn feature "default" (*)
    │   │       │       │   │   │           │   │   ├── syn feature "fold"
    │   │       │       │   │   │           │   │   │   └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │   └── synstructure feature "default"
    │   │       │       │   │   │           │   │       ├── synstructure v0.13.2
    │   │       │       │   │   │           │   │       │   ├── proc-macro2 v1.0.103 (*)
    │   │       │       │   │   │           │   │       │   ├── quote v1.0.41 (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "clone-impls" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "derive" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "extra-traits"
    │   │       │       │   │   │           │   │       │   │   └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "parsing" (*)
    │   │       │       │   │   │           │   │       │   ├── syn feature "printing" (*)
    │   │       │       │   │   │           │   │       │   └── syn feature "visit"
    │   │       │       │   │   │           │   │       │       └── syn v2.0.108 (*)
    │   │       │       │   │   │           │   │       └── synstructure feature "proc-macro"
    │   │       │       │   │   │           │   │           ├── synstructure v0.13.2 (*)
    │   │       │       │   │   │           │   │           ├── proc-macro2 feature "proc-macro" (*)
    │   │       │       │   │   │           │   │           ├── quote feature "proc-macro" (*)
    │   │       │       │   │   │           │   │           └── syn feature "proc-macro" (*)
    │   │       │       │   │   │           │   └── zerofrom v0.1.6
    │   │       │       │   │   │           │       └── zerofrom-derive v0.1.6 (proc-macro)
    │   │       │       │   │   │           │           ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │           │           ├── quote feature "default" (*)
    │   │       │       │   │   │           │           ├── syn feature "default" (*)
    │   │       │       │   │   │           │           ├── syn feature "fold" (*)
    │   │       │       │   │   │           │           └── synstructure feature "default" (*)
    │   │       │       │   │   │           ├── zerofrom v0.1.6 (*)
    │   │       │       │   │   │           └── zerovec-derive v0.11.2 (proc-macro)
    │   │       │       │   │   │               ├── proc-macro2 feature "default" (*)
    │   │       │       │   │   │               ├── quote feature "default" (*)
    │   │       │       │   │   │               ├── syn feature "default" (*)
    │   │       │       │   │   │               └── syn feature "extra-traits" (*)
    │   │       │       │   │   ├── zerovec feature "derive"
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── zerovec feature "yoke"
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── yoke feature "derive"
    │   │       │       │   │   │   ├── yoke v0.8.1 (*)
    │   │       │       │   │   │   ├── yoke feature "zerofrom"
    │   │       │       │   │   │   │   └── yoke v0.8.1 (*)
    │   │       │       │   │   │   └── zerofrom feature "derive"
    │   │       │       │   │   │       └── zerofrom v0.1.6 (*)
    │   │       │       │   │   └── zerofrom feature "derive" (*)
    │   │       │       │   ├── icu_normalizer_data v2.1.1
    │   │       │       │   ├── icu_provider v2.1.1
    │   │       │       │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   ├── icu_locale_core v2.1.1
    │   │       │       │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   ├── litemap v0.8.1
    │   │       │       │   │   │   ├── tinystr v0.8.2
    │   │       │       │   │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   │   ├── writeable v0.6.2
    │   │       │       │   │   │   └── zerovec v0.11.5 (*)
    │   │       │       │   │   ├── writeable v0.6.2
    │   │       │       │   │   ├── zerotrie v0.2.3
    │   │       │       │   │   │   ├── displaydoc v0.2.5 (proc-macro) (*)
    │   │       │       │   │   │   ├── zerofrom v0.1.6 (*)
    │   │       │       │   │   │   └── yoke feature "derive" (*)
    │   │       │       │   │   ├── zerovec feature "derive" (*)
    │   │       │       │   │   ├── yoke feature "derive" (*)
    │   │       │       │   │   └── zerofrom feature "derive" (*)
    │   │       │       │   ├── smallvec v1.15.1
    │   │       │       │   └── zerovec v0.11.5 (*)
    │   │       │       └── icu_properties v2.1.1
    │   │       │           ├── icu_collections v2.1.1 (*)
    │   │       │           ├── icu_properties_data v2.1.1
    │   │       │           ├── icu_provider v2.1.1 (*)
    │   │       │           ├── zerovec feature "derive" (*)
    │   │       │           ├── zerovec feature "yoke" (*)
    │   │       │           ├── icu_locale_core feature "zerovec"
    │   │       │           │   ├── icu_locale_core v2.1.1 (*)
    │   │       │           │   └── tinystr feature "zerovec"
    │   │       │           │       └── tinystr v0.8.2 (*)
    │   │       │           ├── zerotrie feature "yoke"
    │   │       │           │   └── zerotrie v0.2.3 (*)
    │   │       │           └── zerotrie feature "zerofrom"
    │   │       │               └── zerotrie v0.2.3 (*)
    │   │       ├── smallvec feature "const_generics"
    │   │       │   └── smallvec v1.15.1
    │   │       ├── smallvec feature "default"
    │   │       │   └── smallvec v1.15.1
    │   │       └── utf8_iter feature "default"
    │   │           └── utf8_iter v1.0.4
    │   └── idna feature "compiled_data"
    │       ├── idna v1.1.0 (*)
    │       └── idna_adapter feature "compiled_data"
    │           ├── idna_adapter v1.2.1 (*)
    │           ├── icu_normalizer feature "compiled_data"
    │           │   ├── icu_normalizer v2.1.1 (*)
    │           │   └── icu_provider feature "baked"
    │           │       └── icu_provider v2.1.1 (*)
    │           └── icu_properties feature "compiled_data"
    │               ├── icu_properties v2.1.1 (*)
    │               └── icu_provider feature "baked" (*)
    └── url feature "std"
        ├── url v2.5.7 (*)
        ├── serde feature "std"
        │   ├── serde v1.0.228 (*)
        │   └── serde_core feature "std"
        │       └── serde_core v1.0.228
        ├── url feature "serde"
        │   └── url v2.5.7 (*)
        ├── form_urlencoded feature "std"
        │   ├── form_urlencoded v1.2.2 (*)
        │   ├── form_urlencoded feature "alloc" (*)
        │   └── percent-encoding feature "std"
        │       ├── percent-encoding v2.3.2
        │       └── percent-encoding feature "alloc" (*)
        ├── percent-encoding feature "std" (*)
        └── idna feature "std"
            ├── idna v1.1.0 (*)
            └── idna feature "alloc" (*)

tests v0.1.0 (/home/ubuntu/dev/url-dep/tests)
└── bootloader feature "default"
    └── bootloader v0.1.0 (/home/ubuntu/dev/url-dep/bootloader) (*)

What I think happened here, is that the compiler confused the features of the serde that is a build-dependency with the serde that is a runtime dependency. This only happens when compiling as a bin-artifact dependency.

Meta

rustc --version --verbose:

rustc 1.93.0-nightly (b15a874aa 2025-11-02)
binary: rustc
commit-hash: b15a874aafe7eab9ea3ac2c1d59c7b03e1425027
commit-date: 2025-11-02
host: x86_64-unknown-linux-gnu
release: 1.93.0-nightly
LLVM version: 21.1.3

But this is not new in this version. The error is the same for rustc 1.83.0-nightly (fb4aebddd 2024-09-30).

(There is no backtrace for RUST_BACKTRACE=1.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-featuresArea: features — conditional compilationC-bugCategory: bugZ-bindepsNightly: binary artifact dependencies

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions