diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2022-04-05 08:37:21 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-05 08:37:21 -0700 |
commit | 291698fe1b5512d72186dfc2400bca85dcb507b1 (patch) | |
tree | cf5b9ac5833d4bd6286e60b8df0dbcafc25aeec5 /src | |
parent | 18c969e74f14670e52cc9f74c4e76ff197af3f36 (diff) | |
download | binaryen-291698fe1b5512d72186dfc2400bca85dcb507b1.tar.gz binaryen-291698fe1b5512d72186dfc2400bca85dcb507b1.tar.bz2 binaryen-291698fe1b5512d72186dfc2400bca85dcb507b1.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/MemoryPacking.cpp | 3 |
1 files changed, 1 insertions, 2 deletions
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<Memory::Segment>& 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<Memory::Segment>& 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. |