summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2022-04-05 08:37:21 -0700
committerGitHub <noreply@github.com>2022-04-05 08:37:21 -0700
commit291698fe1b5512d72186dfc2400bca85dcb507b1 (patch)
treecf5b9ac5833d4bd6286e60b8df0dbcafc25aeec5 /src
parent18c969e74f14670e52cc9f74c4e76ff197af3f36 (diff)
downloadbinaryen-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.cpp3
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.