diff options
Diffstat (limited to 'src/tools/wasm-shell.cpp')
-rw-r--r-- | src/tools/wasm-shell.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/tools/wasm-shell.cpp b/src/tools/wasm-shell.cpp index 2a59be167..9ad1fa799 100644 --- a/src/tools/wasm-shell.cpp +++ b/src/tools/wasm-shell.cpp @@ -146,24 +146,29 @@ static void run_asserts(Name moduleName, size_t* i, bool* checked, Module* wasm, } if (!invalid && id == ASSERT_UNLINKABLE) { // validate "instantiating" the mdoule - for (auto& import : wasm.imports) { + auto reportUnknownImport = [&](Importable* import) { + std::cerr << "unknown import: " << import->module << '.' << import->base << '\n'; + invalid = true; + }; + ModuleUtils::iterImportedGlobals(wasm, reportUnknownImport); + ModuleUtils::iterImportedFunctions(wasm, [&](Importable* import) { if (import->module == SPECTEST && import->base == PRINT) { - if (import->kind != ExternalKind::Function) { - std::cerr << "spectest.print should be a function, but is " << int32_t(import->kind) << '\n'; - invalid = true; - break; - } + // We can handle it. } else { - std::cerr << "unknown import: " << import->module << '.' << import->base << '\n'; - invalid = true; - break; + reportUnknownImport(import); } + }); + if (wasm.memory.imported()) { + reportUnknownImport(&wasm.memory); + } + if (wasm.table.imported()) { + reportUnknownImport(&wasm.table); } for (auto& segment : wasm.table.segments) { for (auto name : segment.data) { // spec tests consider it illegal to use spectest.print in a table - if (auto* import = wasm.getImportOrNull(name)) { - if (import->module == SPECTEST && import->base == PRINT) { + if (auto* import = wasm.getFunction(name)) { + if (import->imported() && import->module == SPECTEST && import->base == PRINT) { std::cerr << "cannot put spectest.print in table\n"; invalid = true; } |