From d5063429c66578e26346dccbd8e378b76d60e3cb Mon Sep 17 00:00:00 2001 From: gram Date: Sun, 3 Mar 2024 17:15:12 +0100 Subject: [PATCH 1/2] wasm: Allow multi-value return in wasmimport --- compiler/symbol.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/compiler/symbol.go b/compiler/symbol.go index bf5ac5f1b7..765b07cfbd 100644 --- a/compiler/symbol.go +++ b/compiler/symbol.go @@ -356,10 +356,8 @@ func (c *compilerContext) checkWasmImport(f *ssa.Function, pragma string) { c.addError(f.Pos(), fmt.Sprintf("can only use //go:wasmimport on declarations")) return } - if f.Signature.Results().Len() > 1 { - c.addError(f.Signature.Results().At(1).Pos(), fmt.Sprintf("%s: too many return values", pragma)) - } else if f.Signature.Results().Len() == 1 { - result := f.Signature.Results().At(0) + for i := 0; i < f.Signature.Results().Len(); i++ { + result := f.Signature.Results().At(i) if !isValidWasmType(result.Type(), true) { c.addError(result.Pos(), fmt.Sprintf("%s: unsupported result type %s", pragma, result.Type().String())) } From 0b2b8caded405d1a3b7738d51be91f6dbc0e5b5c Mon Sep 17 00:00:00 2001 From: gram Date: Sun, 3 Mar 2024 17:53:27 +0100 Subject: [PATCH 2/2] actualize tests --- compiler/testdata/errors.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/compiler/testdata/errors.go b/compiler/testdata/errors.go index 5778a931e1..d95334d1a5 100644 --- a/compiler/testdata/errors.go +++ b/compiler/testdata/errors.go @@ -27,8 +27,6 @@ func invalidparam(a int, b string, c []byte, d *int32) //go:wasmimport modulename validreturn func validreturn() int32 -// ERROR: //go:wasmimport modulename manyreturns: too many return values -// //go:wasmimport modulename manyreturns func manyreturns() (int32, int32)