| // 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 wasmexport supports allowed types and rejects |
| // unallowed types. |
| |
| //go:build wasm |
| |
| package p |
| |
| import "unsafe" |
| |
| //go:wasmexport good1 |
| func good1(int32, uint32, int64, uint64, float32, float64, unsafe.Pointer) {} // allowed types |
| |
| type MyInt32 int32 |
| |
| //go:wasmexport good2 |
| func good2(MyInt32) {} // named type is ok |
| |
| //go:wasmexport good3 |
| func good3() int32 { return 0 } // one result is ok |
| |
| //go:wasmexport good4 |
| func good4() unsafe.Pointer { return nil } // one result is ok |
| |
| //go:wasmexport bad1 |
| func bad1(string) {} // ERROR "go:wasmexport: unsupported parameter type" |
| |
| //go:wasmexport bad2 |
| func bad2(any) {} // ERROR "go:wasmexport: unsupported parameter type" |
| |
| //go:wasmexport bad3 |
| func bad3(func()) {} // ERROR "go:wasmexport: unsupported parameter type" |
| |
| //go:wasmexport bad4 |
| func bad4(uint8) {} // ERROR "go:wasmexport: unsupported parameter type" |
| |
| // Pointer types are not allowed, except unsafe.Pointer. |
| // Struct and array types are also not allowed. |
| // If proposal 66984 is accepted and implemented, we may allow them. |
| |
| //go:wasmexport bad5 |
| func bad5(*int32) {} // ERROR "go:wasmexport: unsupported parameter type" |
| |
| type S struct { x, y int32 } |
| |
| //go:wasmexport bad6 |
| func bad6(S) {} // ERROR "go:wasmexport: unsupported parameter type" |
| |
| //go:wasmexport bad7 |
| func bad7(*S) {} // ERROR "go:wasmexport: unsupported parameter type" |
| |
| //go:wasmexport bad8 |
| func bad8([4]int32) {} // ERROR "go:wasmexport: unsupported parameter type" |
| |
| //go:wasmexport bad9 |
| func bad9() bool { return false } // ERROR "go:wasmexport: unsupported result type" |
| |
| //go:wasmexport bad10 |
| func bad10() *byte { return nil } // ERROR "go:wasmexport: unsupported result type" |
| |
| //go:wasmexport toomanyresults |
| func toomanyresults() (int32, int32) { return 0, 0 } // ERROR "go:wasmexport: too many return values" |