diff options
Diffstat (limited to 'src/wasm/wasm-validator.cpp')
-rw-r--r-- | src/wasm/wasm-validator.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp index eaeea7f1a..0de417ed7 100644 --- a/src/wasm/wasm-validator.cpp +++ b/src/wasm/wasm-validator.cpp @@ -21,6 +21,7 @@ #include "ir/features.h" #include "ir/global-utils.h" +#include "ir/intrinsics.h" #include "ir/module-utils.h" #include "ir/stack-utils.h" #include "ir/utils.h" @@ -2705,6 +2706,16 @@ static void validateImports(Module& module, ValidationInfo& info) { "Imported function must not have i64 results"); } } + + if (Intrinsics(module).isCallWithoutEffects(curr)) { + auto lastParam = curr->getParams(); + if (lastParam.isTuple()) { + lastParam = lastParam.getTuple().types.back(); + } + info.shouldBeTrue(lastParam.isFunction(), + curr->name, + "call.if.used's last param must be a function"); + } }); ModuleUtils::iterImportedGlobals(module, [&](Global* curr) { if (!module.features.hasMutableGlobals()) { |