@@ -322,7 +322,7 @@ fn resolve_toml(
322322 } ) ;
323323 resolved_toml. package = Some ( resolved_package) ;
324324
325- resolved_toml. features = resolve_features ( original_toml. features . as_ref ( ) ) ?;
325+ resolved_toml. features = resolve_features ( original_toml. features . as_ref ( ) , edition ) ?;
326326
327327 resolved_toml. lib = targets:: resolve_lib (
328328 original_toml. lib . as_ref ( ) ,
@@ -691,11 +691,34 @@ fn default_readme_from_package_root(package_root: &Path) -> Option<String> {
691691#[ tracing:: instrument( skip_all) ]
692692fn resolve_features (
693693 original_features : Option < & BTreeMap < manifest:: FeatureName , Vec < String > > > ,
694+ edition : Edition ,
694695) -> CargoResult < Option < BTreeMap < manifest:: FeatureName , Vec < String > > > > {
695- let Some ( resolved_features) = original_features. cloned ( ) else {
696+ let Some ( mut resolved_features) = original_features. cloned ( ) else {
696697 return Ok ( None ) ;
697698 } ;
698699
700+ if Edition :: Edition2024 <= edition {
701+ for activations in resolved_features. values_mut ( ) {
702+ let mut deps = Vec :: new ( ) ;
703+ for feature_value in activations. iter ( ) {
704+ let feature_value = FeatureValue :: new ( InternedString :: new ( feature_value) ) ;
705+ let FeatureValue :: DepFeature {
706+ dep_name,
707+ dep_feature : _,
708+ weak : false ,
709+ } = feature_value
710+ else {
711+ continue ;
712+ } ;
713+ let dep = FeatureValue :: Dep { dep_name } . to_string ( ) ;
714+ if !activations. contains ( & dep) {
715+ deps. push ( dep) ;
716+ }
717+ }
718+ activations. extend ( deps) ;
719+ }
720+ }
721+
699722 Ok ( Some ( resolved_features) )
700723}
701724
0 commit comments