@@ -1103,24 +1103,30 @@ fn emit_warnings(
11031103 new_cx. resolve_features = im_rc:: HashMap :: new ( ) ;
11041104 let mut features_from_dep = HashMap :: new ( ) ;
11051105 for ( summary, method) in summaries {
1106+ let replacement = & cx. activations [ & resolve
1107+ . replacements ( )
1108+ . get ( & summary. package_id ( ) )
1109+ . unwrap_or ( & summary. package_id ( ) )
1110+ . as_activations_key ( ) ]
1111+ . 0 ;
11061112 for ( dep, features) in new_cx
1107- . resolve_features ( None , summary , & method, config)
1108- . expect ( "can not resolve_features for a required summary " )
1113+ . resolve_features ( None , replacement , & method, config)
1114+ . expect ( "can not resolve_features for a required summery " )
11091115 {
1110- features_from_dep. insert ( ( summary . package_id ( ) , dep) , features) ;
1116+ features_from_dep. insert ( ( replacement . package_id ( ) , dep) , features) ;
11111117 }
11121118 }
11131119 // crates enable features for their dependencies.
11141120 // So by iterating reverse topologically we process all of the parents before each child.
11151121 // Then we know all the needed features for each crate.
11161122 let topological_sort = resolve. sort ( ) ;
1117- for summary in topological_sort. iter ( ) . rev ( ) . map ( |id| {
1118- cx . activations
1119- . get ( & id . as_activations_key ( ) )
1120- . expect ( "id in dependency graph but not in activations" )
1121- . 0
1122- . clone ( )
1123- } ) {
1123+ for id in topological_sort
1124+ . iter ( )
1125+ . rev ( )
1126+ . filter ( | & id| !resolve . replacements ( ) . contains_key ( id ) )
1127+ {
1128+ let summary = & cx . activations [ & id . as_activations_key ( ) ] . 0 ;
1129+
11241130 for ( parent, deps) in cx. parents . edges ( & summary. package_id ( ) ) {
11251131 for dep in deps. iter ( ) {
11261132 let features = features_from_dep
@@ -1133,7 +1139,7 @@ fn emit_warnings(
11331139 uses_default_features : dep. uses_default_features ( ) ,
11341140 } ;
11351141 for ( dep, features) in new_cx
1136- . resolve_features ( None , & summary, & method, config)
1142+ . resolve_features ( None , summary, & method, config)
11371143 . expect ( "can not resolve_features for a used dep" )
11381144 {
11391145 features_from_dep. insert ( ( summary. package_id ( ) , dep) , features) ;
0 commit comments