summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-c.h3
-rw-r--r--src/wasm/wasm-validator.cpp7
2 files changed, 9 insertions, 1 deletions
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index 90c7795f0..f37bcf085 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -281,6 +281,9 @@ BinaryenExpressionRef BinaryenSwitch(BinaryenModuleRef module, const char **name
// type returned by the function being called, as that
// function might not have been created yet, so we don't
// know what it is.
+// Also note that WebAssembly does not differentiate
+// between Call and CallImport, but Binaryen does, so you
+// must use CallImport if calling an import, and vice versa.
BinaryenExpressionRef BinaryenCall(BinaryenModuleRef module, const char *target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType);
BinaryenExpressionRef BinaryenCallImport(BinaryenModuleRef module, const char *target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, BinaryenType returnType);
BinaryenExpressionRef BinaryenCallIndirect(BinaryenModuleRef module, BinaryenExpressionRef target, BinaryenExpressionRef* operands, BinaryenIndex numOperands, const char* type);
diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp
index 9421070e7..21bf68b62 100644
--- a/src/wasm/wasm-validator.cpp
+++ b/src/wasm/wasm-validator.cpp
@@ -168,7 +168,12 @@ void WasmValidator::visitSwitch(Switch *curr) {
void WasmValidator::visitCall(Call *curr) {
if (!validateGlobally) return;
auto* target = getModule()->getFunctionOrNull(curr->target);
- if (!shouldBeTrue(!!target, curr, "call target must exist")) return;
+ if (!shouldBeTrue(!!target, curr, "call target must exist")) {
+ if (getModule()->getImportOrNull(curr->target)) {
+ std::cerr << "(perhaps it should be a CallImport instead of Call?)\n";
+ }
+ return;
+ }
if (!shouldBeTrue(curr->operands.size() == target->params.size(), curr, "call param number must match")) return;
for (size_t i = 0; i < curr->operands.size(); i++) {
if (!shouldBeEqualOrFirstIsUnreachable(curr->operands[i]->type, target->params[i], curr, "call param types must match")) {