@@ -76,7 +76,7 @@ struct ExpressionAnalyzer {
7676// vs
7777// (block (unreachable))
7878// This converts to the latter form.
79- struct ReFinalize : public WalkerPass <PostWalker<ReFinalize>> {
79+ struct ReFinalize : public WalkerPass <PostWalker<ReFinalize, OverriddenVisitor<ReFinalize> >> {
8080 bool isFunctionParallel () override { return true ; }
8181
8282 Pass* create () override { return new ReFinalize; }
@@ -154,6 +154,8 @@ struct ReFinalize : public WalkerPass<PostWalker<ReFinalize>> {
154154 void visitStore (Store *curr) { curr->finalize (); }
155155 void visitAtomicRMW (AtomicRMW *curr) { curr->finalize (); }
156156 void visitAtomicCmpxchg (AtomicCmpxchg *curr) { curr->finalize (); }
157+ void visitAtomicWait (AtomicWait* curr) { curr->finalize (); }
158+ void visitAtomicWake (AtomicWake* curr) { curr->finalize (); }
157159 void visitConst (Const *curr) { curr->finalize (); }
158160 void visitUnary (Unary *curr) { curr->finalize (); }
159161 void visitBinary (Binary *curr) { curr->finalize (); }
@@ -173,6 +175,14 @@ struct ReFinalize : public WalkerPass<PostWalker<ReFinalize>> {
173175 }
174176 }
175177
178+ void visitFunctionType (FunctionType* curr) { WASM_UNREACHABLE (); }
179+ void visitImport (Import* curr) { WASM_UNREACHABLE (); }
180+ void visitExport (Export* curr) { WASM_UNREACHABLE (); }
181+ void visitGlobal (Global* curr) { WASM_UNREACHABLE (); }
182+ void visitTable (Table* curr) { WASM_UNREACHABLE (); }
183+ void visitMemory (Memory* curr) { WASM_UNREACHABLE (); }
184+ void visitModule (Module* curr) { WASM_UNREACHABLE (); }
185+
176186 WasmType getValueType (Expression* value) {
177187 return value ? value->type : none;
178188 }
@@ -186,7 +196,7 @@ struct ReFinalize : public WalkerPass<PostWalker<ReFinalize>> {
186196
187197// Re-finalize a single node. This is slow, if you want to refinalize
188198// an entire ast, use ReFinalize
189- struct ReFinalizeNode : public Visitor <ReFinalizeNode> {
199+ struct ReFinalizeNode : public OverriddenVisitor <ReFinalizeNode> {
190200 void visitBlock (Block *curr) { curr->finalize (); }
191201 void visitIf (If *curr) { curr->finalize (); }
192202 void visitLoop (Loop *curr) { curr->finalize (); }
@@ -201,6 +211,10 @@ struct ReFinalizeNode : public Visitor<ReFinalizeNode> {
201211 void visitSetGlobal (SetGlobal *curr) { curr->finalize (); }
202212 void visitLoad (Load *curr) { curr->finalize (); }
203213 void visitStore (Store *curr) { curr->finalize (); }
214+ void visitAtomicRMW (AtomicRMW* curr) { curr->finalize (); }
215+ void visitAtomicCmpxchg (AtomicCmpxchg* curr) { curr->finalize (); }
216+ void visitAtomicWait (AtomicWait* curr) { curr->finalize (); }
217+ void visitAtomicWake (AtomicWake* curr) { curr->finalize (); }
204218 void visitConst (Const *curr) { curr->finalize (); }
205219 void visitUnary (Unary *curr) { curr->finalize (); }
206220 void visitBinary (Binary *curr) { curr->finalize (); }
@@ -211,6 +225,14 @@ struct ReFinalizeNode : public Visitor<ReFinalizeNode> {
211225 void visitNop (Nop *curr) { curr->finalize (); }
212226 void visitUnreachable (Unreachable *curr) { curr->finalize (); }
213227
228+ void visitFunctionType (FunctionType* curr) { WASM_UNREACHABLE (); }
229+ void visitImport (Import* curr) { WASM_UNREACHABLE (); }
230+ void visitExport (Export* curr) { WASM_UNREACHABLE (); }
231+ void visitGlobal (Global* curr) { WASM_UNREACHABLE (); }
232+ void visitTable (Table* curr) { WASM_UNREACHABLE (); }
233+ void visitMemory (Memory* curr) { WASM_UNREACHABLE (); }
234+ void visitModule (Module* curr) { WASM_UNREACHABLE (); }
235+
214236 // given a stack of nested expressions, update them all from child to parent
215237 static void updateStack (std::vector<Expression*>& expressionStack) {
216238 for (int i = int (expressionStack.size ()) - 1 ; i >= 0 ; i--) {
0 commit comments