summaryrefslogtreecommitdiff
path: root/src/passes
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes')
-rw-r--r--src/passes/MemoryPacking.cpp4
-rw-r--r--src/passes/Print.cpp6
-rw-r--r--src/passes/RemoveUnusedModuleElements.cpp4
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);