summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-05-13 11:31:04 -0700
committerGitHub <noreply@github.com>2021-05-13 11:31:04 -0700
commit284a47cbe888a3421d6f20f2bda716ae1ece097b (patch)
treede90f37950070c70ccfa8d57c96f6e5f19da3ed7
parent665718a208786238633192d706c5cd61d4f5ad05 (diff)
downloadbinaryen-284a47cbe888a3421d6f20f2bda716ae1ece097b.tar.gz
binaryen-284a47cbe888a3421d6f20f2bda716ae1ece097b.tar.bz2
binaryen-284a47cbe888a3421d6f20f2bda716ae1ece097b.zip
RemoveUnusedModuleElements: The start function may be imported (#3884)
Without this fix we can segfault, as it has no body. Fixes #3879
-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)