{"id":"c62c1ace021c3397","repo":"rust-lang/cargo","slug":"invalid-feature-in-required-features-of-targe-c62c1a","errorCode":null,"errorMessage":"invalid feature `{}` in required-features of target `{}`: optional dependency with `?` is not allowed in required-features","messagePattern":"invalid feature `(.+?)` in required-features of target `(.+?)`: optional dependency with `\\?` is not allowed in required-features","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/ops/cargo_compile/unit_generator.rs","lineNumber":661,"sourceCode":"                FeatureValue::Feature(f) => {\n                    if !summary.features().contains_key(f) {\n                        shell.warn(format!(\n                            \"invalid feature `{}` in required-features of target `{}`: \\\n                      `{}` is not present in [features] section\",\n                            fv, target_name, fv\n                        ))?;\n                    }\n                }\n                FeatureValue::Dep { .. } => {\n                    anyhow::bail!(\n                        \"invalid feature `{}` in required-features of target `{}`: \\\n                  `dep:` prefixed feature values are not allowed in required-features\",\n                        fv,\n                        target_name\n                    );\n                }\n                FeatureValue::DepFeature { weak: true, .. } => {\n                    anyhow::bail!(\n                        \"invalid feature `{}` in required-features of target `{}`: \\\n                  optional dependency with `?` is not allowed in required-features\",\n                        fv,\n                        target_name\n                    );\n                }\n                // Handling of dependent_crate/dependent_crate_feature syntax\n                FeatureValue::DepFeature {\n                    dep_name,\n                    dep_feature,\n                    weak: false,\n                } => {\n                    match resolve.deps(summary.package_id()).find(|(_dep_id, deps)| {\n                        deps.iter().any(|dep| dep.name_in_toml() == *dep_name)\n                    }) {\n                        Some((dep_id, _deps)) => {\n                            let dep_summary = resolve.summary(dep_id);\n                            if !dep_summary.features().contains_key(dep_feature)","sourceCodeStart":643,"sourceCodeEnd":679,"githubUrl":"https://github.com/rust-lang/cargo/blob/0e07a155371a6ce88ae53a2c00df940280c09a67/src/ops/cargo_compile/unit_generator.rs#L643-L679","documentation":"Thrown by check_required_features (src/ops/cargo_compile/unit_generator.rs:660-667) when a target's `required-features` contains a weak dependency reference using the `dep_name?` (optional dependency with `?`) syntax. Weak/conditional activation is a [features]-table concept and is not permitted inside target required-features.","triggerScenarios":"Writing `[[bin]] required-features = [\"serde?\"]` (the `?` weak-dep syntax). FeatureValue::DepFeature{weak:true,...} triggers the bail.","commonSituations":"Using new weak-deps syntax in the wrong place. Copying `crate?/feature` patterns into required-features. Feature-guide confusion between [features] and required-features.","solutions":["Use the bare dependency name `serde` (required-features treats listing a dep name as requiring it enabled).","Use `dep_name/feature` if you need a specific dependency feature.","Drop the `?`."],"exampleFix":"# before\n[[bin]]\nname = \"mybin\"\nrequired-features = [\"serde?\"]\n\n# after\n[[bin]]\nname = \"mybin\"\nrequired-features = [\"serde\"]","handlingStrategy":"validation","validationCode":"// Reject `name?` weak-dep references in required-features.\nfn no_weak_dep_in_required_features(pkg: &cargo::core::Package) -> Result<(), String> {\n    for t in pkg.targets() {\n        if let Some(rf) = t.required_features() {\n            for f in rf {\n                if f.ends_with('?') || f.contains(\"?/\") {\n                    return Err(format!(\"target {} uses forbidden weak-dep `?` in required-features\", t.name()));\n                }\n            }\n        }\n    }\n    Ok(())\n}","typeGuard":"fn has_no_weak_dep(values: &[String]) -> bool {\n    values.iter().all(|v| !v.contains('?'))\n}","tryCatchPattern":"if let Err(e) = ops::compile(ws, &opts) {\n    if e.to_string().contains(\"optional dependency with `?`\") {\n        eprintln!(\"drop the `?`; list the bare dependency name in required-features\");\n    }\n    return Err(e);\n}","preventionTips":["Keep weak-dep `?` syntax inside [features], not required-features.","Lint manifests in CI for `?` inside required-features."],"tags":["cargo","manifest","features","required-features","weak-deps"],"analyzedSha":"0e07a155371a6ce88ae53a2c00df940280c09a67","analyzedAt":"2026-08-06T01:46:58.334Z","schemaVersion":2}