summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/build_engine/target_map/result_map.hpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/buildtool/build_engine/target_map/result_map.hpp b/src/buildtool/build_engine/target_map/result_map.hpp
index d38a1d7a..449d8c92 100644
--- a/src/buildtool/build_engine/target_map/result_map.hpp
+++ b/src/buildtool/build_engine/target_map/result_map.hpp
@@ -204,7 +204,7 @@ class ResultTargetMap {
auto& origin_map = progress->OriginMap();
origin_map.clear();
- origin_map.reserve(na);
+ origin_map.reserve(na + nto);
for (const auto& target : targets_) {
std::for_each(target.begin(), target.end(), [&](auto const& el) {
auto const& actions = el.second->Actions();
@@ -225,6 +225,23 @@ class ResultTargetMap {
origin};
}
});
+ auto const& tree_overlays = el.second->TreeOverlays();
+ std::for_each(
+ tree_overlays.begin(),
+ tree_overlays.end(),
+ [&origin_map, &pos, &el](auto const& overlay) {
+ std::pair<ConfiguredTarget, std::size_t> origin{
+ el.first, pos++};
+ auto id = overlay->Id();
+ if (origin_map.contains(id)) {
+ origin_map[id].push_back(origin);
+ }
+ else {
+ origin_map[id] = std::vector<
+ std::pair<ConfiguredTarget, std::size_t>>{
+ origin};
+ }
+ });
});
// Sort origins to get a reproducible order. We don't expect many
// origins for a single action, so the cost of comparison is not