aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2024-08-03 14:20:58 -0400
committerCherry Mui <cherryyz@google.com>2024-08-09 20:07:54 +0000
commit1cf6e31f0d03bb3571cfe034f2d909591a0ae453 (patch)
treec89cb9d652377eb4517c497f6c4d4ea4ccf29b70 /test
parentff2a57ba92b9ecc9315c992b332279d0428c36d7 (diff)
downloadgo-1cf6e31f0d03bb3571cfe034f2d909591a0ae453.tar.xz
cmd/compile: add basic wasmexport support
This CL adds a compiler directive go:wasmexport, which applies to a Go function and makes it an exported function of the Wasm module being built, so it can be called directly from the host. As proposed in #65199, parameter and result types are limited to 32-bit and 64-bit integers and floats, and there can be at most one result. As the Go and Wasm calling conventions are different, for a wasmexport function we generate a wrapper function does the ABI conversion at compile time. Currently this CL only adds basic support. In particular, - it only supports executable mode, i.e. the Go wasm module calls into the host via wasmimport, which then calls back to Go via wasmexport. Library (c-shared) mode is not implemented yet. - only supports wasip1, not js. - if the exported function unwinds stacks (goroutine switch, stack growth, etc.), it probably doesn't work. TODO: support stack unwinding, c-shared mode, js. For #65199. Change-Id: Id1777c2d44f7d51942c1caed3173c0a82f120cc4 Reviewed-on: https://go-review.googlesource.com/c/go/+/603055 Reviewed-by: Than McIntosh <thanm@golang.org> Reviewed-by: Randy Reddig <randy.reddig@fastly.com> Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'test')
-rw-r--r--test/wasmexport.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/test/wasmexport.go b/test/wasmexport.go
new file mode 100644
index 0000000000..3b92ae93c9
--- /dev/null
+++ b/test/wasmexport.go
@@ -0,0 +1,19 @@
+// errorcheck
+
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Verify that misplaced directives are diagnosed.
+
+//go:build wasm
+
+package p
+
+//go:wasmexport F
+func F() {} // OK
+
+type S int32
+
+//go:wasmexport M
+func (S) M() {} // ERROR "cannot use //go:wasmexport on a method"