diff options
Diffstat (limited to 'src/passes')
-rw-r--r-- | src/passes/MemoryPacking.cpp | 4 | ||||
-rw-r--r-- | src/passes/Print.cpp | 6 | ||||
-rw-r--r-- | src/passes/RemoveUnusedModuleElements.cpp | 4 |
3 files changed, 10 insertions, 4 deletions
diff --git a/src/passes/MemoryPacking.cpp b/src/passes/MemoryPacking.cpp index c7b20c582..2c0dac395 100644 --- a/src/passes/MemoryPacking.cpp +++ b/src/passes/MemoryPacking.cpp @@ -35,7 +35,8 @@ struct MemoryPacking : public Pass { segment.data.pop_back(); } // we can only handle a constant offset for splitting - if (auto* offset = segment.offset->dynCast<Const>()) { + Const* offset; + if (!segment.isPassive && (offset = segment.offset->dynCast<Const>())) { // Find runs of zeros, and split auto& data = segment.data; auto base = offset->value.geti32(); @@ -79,4 +80,3 @@ Pass *createMemoryPackingPass() { } } // namespace wasm - diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp index 6d7d512ff..ebfb6c311 100644 --- a/src/passes/Print.cpp +++ b/src/passes/Print.cpp @@ -1289,7 +1289,11 @@ struct PrintSExpression : public Visitor<PrintSExpression> { doIndent(o, indent); o << '('; printMajor(o, "data "); - visit(segment.offset); + if (segment.isPassive) { + printMedium(o, "passive"); + } else { + visit(segment.offset); + } o << " \""; for (size_t i = 0; i < segment.data.size(); i++) { unsigned char c = segment.data[i]; diff --git a/src/passes/RemoveUnusedModuleElements.cpp b/src/passes/RemoveUnusedModuleElements.cpp index b9c8d5150..777d2dacc 100644 --- a/src/passes/RemoveUnusedModuleElements.cpp +++ b/src/passes/RemoveUnusedModuleElements.cpp @@ -51,7 +51,9 @@ struct ReachabilityAnalyzer : public PostWalker<ReachabilityAnalyzer> { queue = roots; // Globals used in memory/table init expressions are also roots for (auto& segment : module->memory.segments) { - walk(segment.offset); + if (!segment.isPassive) { + walk(segment.offset); + } } for (auto& segment : module->table.segments) { walk(segment.offset); |