blob: e3b3bbed6e1847b71f365f947567c88c868e28a8 [file] [log] [blame]
// 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"