summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2023-03-21 12:55:14 -0700
committerGitHub <noreply@github.com>2023-03-21 12:55:14 -0700
commit0f9c9b0a61c36a802319fd8c3bbcb8f2d8126c55 (patch)
treed047d27da1900616ff72432b4d7b44d3efd181de /src
parentef674ecb40d1dcdcb39a33a7d28772edaeff63b8 (diff)
downloadbinaryen-0f9c9b0a61c36a802319fd8c3bbcb8f2d8126c55.tar.gz
binaryen-0f9c9b0a61c36a802319fd8c3bbcb8f2d8126c55.tar.bz2
binaryen-0f9c9b0a61c36a802319fd8c3bbcb8f2d8126c55.zip
Properly error on multivalue returns in GenerateDynCalls (#5588)
Fixes #5586
Diffstat (limited to 'src')
-rw-r--r--src/passes/GenerateDynCalls.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/passes/GenerateDynCalls.cpp b/src/passes/GenerateDynCalls.cpp
index 5498c91e3..c2d829530 100644
--- a/src/passes/GenerateDynCalls.cpp
+++ b/src/passes/GenerateDynCalls.cpp
@@ -118,6 +118,16 @@ static void exportFunction(Module& wasm, Name name, bool must_export) {
void GenerateDynCalls::generateDynCallThunk(HeapType funcType) {
Signature sig = funcType.getSignature();
+
+ if (sig.results.isTuple()) {
+ // Emscripten output is assumed to be MVP, and not to have multiple return
+ // values. In particular, signatures in Emscripten all look like "abcd"
+ // where "a" is the single return value, and "bcd" are the (in this case
+ // three) parameters.
+ Fatal() << "GenerateDynCalls: Cannot operate on multiple return values:"
+ << sig.results;
+ }
+
if (onlyI64 && !hasI64(sig)) {
return;
}