diff options
-rw-r--r-- | src/buildtool/build_engine/target_map/result_map.hpp | 19 |
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 |