From e53d4bdae0fffb6763ec4ae4fbf6f727d0da04d2 Mon Sep 17 00:00:00 2001 From: Heejin Ahn Date: Fri, 1 Nov 2019 13:51:50 -0700 Subject: Don't remove events used in instructions (#2412) Previously RemoveUnusedModuleElements pass only preserved exported events and did not preserve events used in `throw` and `br_on_exn` instructions. This fixes it. --- src/passes/RemoveUnusedModuleElements.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/passes/RemoveUnusedModuleElements.cpp b/src/passes/RemoveUnusedModuleElements.cpp index d4c6d5a5d..806545adf 100644 --- a/src/passes/RemoveUnusedModuleElements.cpp +++ b/src/passes/RemoveUnusedModuleElements.cpp @@ -116,6 +116,18 @@ struct ReachabilityAnalyzer : public PostWalker { usesMemory = true; } } + void visitThrow(Throw* curr) { + if (reachable.count(ModuleElement(ModuleElementKind::Event, curr->event)) == + 0) { + queue.emplace_back(ModuleElementKind::Event, curr->event); + } + } + void visitBrOnExn(BrOnExn* curr) { + if (reachable.count(ModuleElement(ModuleElementKind::Event, curr->event)) == + 0) { + queue.emplace_back(ModuleElementKind::Event, curr->event); + } + } }; // Finds function type usage -- cgit v1.2.3