diff options
Diffstat (limited to 'src/passes/pass.cpp')
-rw-r--r-- | src/passes/pass.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index c548b66c5..4036b8f47 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -896,7 +896,11 @@ void PassRunner::runPass(Pass* pass) { checker = std::unique_ptr<AfterEffectModuleChecker>( new AfterEffectModuleChecker(wasm)); } - pass->run(this, wasm); + // Passes can only be run once and we deliberately do not clear the pass + // runner after running the pass, so there must not already be a runner here. + assert(!pass->getPassRunner()); + pass->setPassRunner(this); + pass->run(wasm); handleAfterEffects(pass); if (getPassDebug()) { checker->check(); @@ -925,15 +929,17 @@ void PassRunner::runPassOnFunction(Pass* pass, Function* func) { bodyBefore << *func->body << '\n'; } - // function-parallel passes get a new instance per function - auto instance = std::unique_ptr<Pass>(pass->create()); std::unique_ptr<AfterEffectFunctionChecker> checker; if (passDebug) { - checker = std::unique_ptr<AfterEffectFunctionChecker>( - new AfterEffectFunctionChecker(func)); + checker = std::make_unique<AfterEffectFunctionChecker>(func); } - instance->runOnFunction(this, wasm, func); + + // Function-parallel passes get a new instance per function + auto instance = pass->create(); + instance->setPassRunner(this); + instance->runOnFunction(wasm, func); handleAfterEffects(pass, func); + if (passDebug) { checker->check(); } |