From 889c295baf8b44160305fe3474b16afbb8634151 Mon Sep 17 00:00:00 2001 From: gatecat Date: Thu, 17 Jun 2021 12:06:26 +0100 Subject: sta: Fix a memory error introduced by the dict move Signed-off-by: gatecat --- common/timing.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'common/timing.cc') diff --git a/common/timing.cc b/common/timing.cc index d0a3b29a..30054e83 100644 --- a/common/timing.cc +++ b/common/timing.cc @@ -807,13 +807,20 @@ struct Timing } // Go forwards topologically to find the maximum arrival time and max path length for each net + std::vector startdomains; for (auto net : topological_order) { if (!net_data.count(net)) continue; - auto &nd_map = net_data.at(net); - for (auto &startdomain : nd_map) { - ClockEvent start_clk = startdomain.first; - auto &nd = startdomain.second; + // Updates later on might invalidate a reference taken here to net_data, so iterate over a list of domains + // instead + startdomains.clear(); + { + auto &nd_map = net_data.at(net); + for (auto &startdomain : nd_map) + startdomains.push_back(startdomain.first); + } + for (auto &start_clk : startdomains) { + auto &nd = net_data.at(net).at(start_clk); if (nd.false_startpoint) continue; const auto net_arrival = nd.max_arrival; -- cgit v1.2.3