diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ir/properties.h | 4 | ||||
-rw-r--r-- | src/tools/wasm-ctor-eval.cpp | 5 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/ir/properties.h b/src/ir/properties.h index 0fee67ad2..13eea6ba2 100644 --- a/src/ir/properties.h +++ b/src/ir/properties.h @@ -83,7 +83,9 @@ inline bool isNamedControlFlow(Expression* curr) { // isValidInConstantExpression or find better names(#4845) inline bool isSingleConstantExpression(const Expression* curr) { return curr->is<Const>() || curr->is<RefNull>() || curr->is<RefFunc>() || - curr->is<StringConst>(); + curr->is<StringConst>() || + (curr->is<RefAs>() && (curr->cast<RefAs>()->op == ExternExternalize || + curr->cast<RefAs>()->op == ExternInternalize)); } inline bool isConstantExpression(const Expression* curr) { diff --git a/src/tools/wasm-ctor-eval.cpp b/src/tools/wasm-ctor-eval.cpp index 195a5350f..5e1bf6b22 100644 --- a/src/tools/wasm-ctor-eval.cpp +++ b/src/tools/wasm-ctor-eval.cpp @@ -1064,6 +1064,11 @@ int main(int argc, const char* argv[]) { if (canEval(wasm)) { evalCtors(wasm, ctors, keptExports); + if (!WasmValidator().validate(wasm)) { + std::cout << wasm << '\n'; + Fatal() << "error in validating output"; + } + // Do some useful optimizations after the evalling { PassRunner passRunner(&wasm); |