summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/RemoveUnusedModuleElements.cpp2
-rw-r--r--test/passes/remove-unused-module-elements_all-features.txt5
-rw-r--r--test/passes/remove-unused-module-elements_all-features.wast4
3 files changed, 10 insertions, 1 deletions
diff --git a/src/passes/RemoveUnusedModuleElements.cpp b/src/passes/RemoveUnusedModuleElements.cpp
index 59d9a2a9b..a26fd5d45 100644
--- a/src/passes/RemoveUnusedModuleElements.cpp
+++ b/src/passes/RemoveUnusedModuleElements.cpp
@@ -150,7 +150,7 @@ struct RemoveUnusedModuleElements : public Pass {
if (module->start.is()) {
auto startFunction = module->getFunction(module->start);
// Can be skipped if the start function is empty.
- if (startFunction->body->is<Nop>()) {
+ if (!startFunction->imported() && startFunction->body->is<Nop>()) {
module->start.clear();
} else {
roots.emplace_back(ModuleElementKind::Function, module->start);
diff --git a/test/passes/remove-unused-module-elements_all-features.txt b/test/passes/remove-unused-module-elements_all-features.txt
index 2a82fc291..498f0a61d 100644
--- a/test/passes/remove-unused-module-elements_all-features.txt
+++ b/test/passes/remove-unused-module-elements_all-features.txt
@@ -272,6 +272,11 @@
)
)
(module
+ (type $none_=>_none (func))
+ (import "env" "start" (func $start))
+ (start $start)
+)
+(module
)
(module
)
diff --git a/test/passes/remove-unused-module-elements_all-features.wast b/test/passes/remove-unused-module-elements_all-features.wast
index 8837f91a9..3b2b031ad 100644
--- a/test/passes/remove-unused-module-elements_all-features.wast
+++ b/test/passes/remove-unused-module-elements_all-features.wast
@@ -239,6 +239,10 @@
(drop (i32.const 0))
)
)
+(module ;; imported start cannot be removed
+ (import "env" "start" (func $start))
+ (start $start)
+)
(module ;; the function and the table can be removed
(type $0 (func (param f64) (result f64)))
(table 6 6 funcref)