From 291698fe1b5512d72186dfc2400bca85dcb507b1 Mon Sep 17 00:00:00 2001 From: Thomas Lively <7121787+tlively@users.noreply.github.com> Date: Tue, 5 Apr 2022 08:37:21 -0700 Subject: Fix MemoryPacking bug (#4579) 247f4c20a1 introduced a bug that caused expressions that refer to data segments to be associated with the wrong segments in the presence of other segments that have no referring expressions at all. Fixes #4569. Fixes #4571. --- src/passes/MemoryPacking.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src') diff --git a/src/passes/MemoryPacking.cpp b/src/passes/MemoryPacking.cpp index c6fd0e313..7b4caf11e 100644 --- a/src/passes/MemoryPacking.cpp +++ b/src/passes/MemoryPacking.cpp @@ -473,7 +473,6 @@ void MemoryPacking::dropUnusedSegments(std::vector& segments, ReferrersMap usedReferrers; // Remove segments that are never used // TODO: remove unused portions of partially used segments as well - size_t newSegIndex = 0; for (size_t i = 0; i < segments.size(); ++i) { bool used = false; auto referrersIt = referrers.find(i); @@ -494,7 +493,7 @@ void MemoryPacking::dropUnusedSegments(std::vector& segments, if (used) { usedSegments.push_back(std::move(segments[i])); if (hasReferrers) { - usedReferrers[newSegIndex++] = std::move(referrersIt->second); + usedReferrers[usedSegments.size() - 1] = std::move(referrersIt->second); } } else if (hasReferrers) { // All referrers are data.drops. Make them nops. -- cgit v1.2.3