diff options
author | Alon Zakai <azakai@google.com> | 2023-03-21 12:55:14 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-21 12:55:14 -0700 |
commit | 0f9c9b0a61c36a802319fd8c3bbcb8f2d8126c55 (patch) | |
tree | d047d27da1900616ff72432b4d7b44d3efd181de /src | |
parent | ef674ecb40d1dcdcb39a33a7d28772edaeff63b8 (diff) | |
download | binaryen-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.cpp | 10 |
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; } |