Skip to content

Commit a473716

Browse files
committed
fix replacements
1 parent d0c80ec commit a473716

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

src/cargo/core/resolver/context.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ impl Context {
338338
graph.add(*i);
339339
for (o, e) in self.parents.edges(i) {
340340
let old_link = graph.link(*o, *i);
341-
debug_assert!(old_link.is_empty());
341+
assert!(old_link.is_empty());
342342
*old_link = e.to_vec();
343343
}
344344
}

src/cargo/core/resolver/mod.rs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)