mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-07-26 06:38:42 +00:00
24c11d4ba5
compiler: align with current wasm types proposal https://github.com/golang/go/issues/66984 - Remove int and uint as allowed types in params, results, pointers, or struct fields - Only allow small integers in pointers, arrays, or struct fields - enforce structs.HostLayout usage per wasm types proposal https://github.com/golang/go/issues/66984 - require go1.23 for structs.HostLayout - use an interface to check if GoVersion() exists This permits TinyGo to compile with Go 1.21. - use goenv.Compare instead of WantGoVersion - testdata/wasmexport: use int32 instead of int - compiler/testdata: add structs.HostLayout - compiler/testdata: improve tests for structs.HostLayout
108 lines
3.6 KiB
Go
108 lines
3.6 KiB
Go
package main
|
|
|
|
import (
|
|
"structs"
|
|
"unsafe"
|
|
)
|
|
|
|
//go:wasmimport modulename empty
|
|
func empty()
|
|
|
|
// ERROR: can only use //go:wasmimport on declarations
|
|
//
|
|
//go:wasmimport modulename implementation
|
|
func implementation() {
|
|
}
|
|
|
|
type Uint uint32
|
|
|
|
type S struct {
|
|
_ structs.HostLayout
|
|
a [4]uint32
|
|
b uintptr
|
|
d float32
|
|
e float64
|
|
}
|
|
|
|
//go:wasmimport modulename validparam
|
|
func validparam(a int32, b uint64, c float64, d unsafe.Pointer, e Uint, f uintptr, g string, h *int32, i *S, j *struct{}, k *[8]uint8)
|
|
|
|
// ERROR: //go:wasmimport modulename invalidparam: unsupported parameter type [4]uint32
|
|
// ERROR: //go:wasmimport modulename invalidparam: unsupported parameter type []byte
|
|
// ERROR: //go:wasmimport modulename invalidparam: unsupported parameter type struct{a int}
|
|
// ERROR: //go:wasmimport modulename invalidparam: unsupported parameter type chan struct{}
|
|
// ERROR: //go:wasmimport modulename invalidparam: unsupported parameter type func()
|
|
// ERROR: //go:wasmimport modulename invalidparam: unsupported parameter type int
|
|
// ERROR: //go:wasmimport modulename invalidparam: unsupported parameter type uint
|
|
// ERROR: //go:wasmimport modulename invalidparam: unsupported parameter type [8]int
|
|
//
|
|
//go:wasmimport modulename invalidparam
|
|
func invalidparam(a [4]uint32, b []byte, c struct{ a int }, d chan struct{}, e func(), f int, g uint, h [8]int)
|
|
|
|
// ERROR: //go:wasmimport modulename invalidparam_no_hostlayout: unsupported parameter type *struct{int}
|
|
// ERROR: //go:wasmimport modulename invalidparam_no_hostlayout: unsupported parameter type *struct{string}
|
|
//
|
|
//go:wasmimport modulename invalidparam_no_hostlayout
|
|
func invalidparam_no_hostlayout(a *struct{ int }, b *struct{ string })
|
|
|
|
//go:wasmimport modulename validreturn_int32
|
|
func validreturn_int32() int32
|
|
|
|
//go:wasmimport modulename validreturn_ptr_int32
|
|
func validreturn_ptr_int32() *int32
|
|
|
|
//go:wasmimport modulename validreturn_ptr_string
|
|
func validreturn_ptr_string() *string
|
|
|
|
//go:wasmimport modulename validreturn_ptr_struct
|
|
func validreturn_ptr_struct() *S
|
|
|
|
//go:wasmimport modulename validreturn_ptr_struct
|
|
func validreturn_ptr_empty_struct() *struct{}
|
|
|
|
//go:wasmimport modulename validreturn_ptr_array
|
|
func validreturn_ptr_array() *[8]uint8
|
|
|
|
//go:wasmimport modulename validreturn_unsafe_pointer
|
|
func validreturn_unsafe_pointer() unsafe.Pointer
|
|
|
|
// ERROR: //go:wasmimport modulename manyreturns: too many return values
|
|
//
|
|
//go:wasmimport modulename manyreturns
|
|
func manyreturns() (int32, int32)
|
|
|
|
// ERROR: //go:wasmimport modulename invalidreturn_int: unsupported result type int
|
|
//
|
|
//go:wasmimport modulename invalidreturn_int
|
|
func invalidreturn_int() int
|
|
|
|
// ERROR: //go:wasmimport modulename invalidreturn_int: unsupported result type uint
|
|
//
|
|
//go:wasmimport modulename invalidreturn_int
|
|
func invalidreturn_uint() uint
|
|
|
|
// ERROR: //go:wasmimport modulename invalidreturn_func: unsupported result type func()
|
|
//
|
|
//go:wasmimport modulename invalidreturn_func
|
|
func invalidreturn_func() func()
|
|
|
|
// ERROR: //go:wasmimport modulename invalidreturn_pointer_array_int: unsupported result type *[8]int
|
|
//
|
|
//go:wasmimport modulename invalidreturn_pointer_array_int
|
|
func invalidreturn_pointer_array_int() *[8]int
|
|
|
|
// ERROR: //go:wasmimport modulename invalidreturn_slice_byte: unsupported result type []byte
|
|
//
|
|
//go:wasmimport modulename invalidreturn_slice_byte
|
|
func invalidreturn_slice_byte() []byte
|
|
|
|
// ERROR: //go:wasmimport modulename invalidreturn_chan_int: unsupported result type chan int
|
|
//
|
|
//go:wasmimport modulename invalidreturn_chan_int
|
|
func invalidreturn_chan_int() chan int
|
|
|
|
// ERROR: //go:wasmimport modulename invalidreturn_string: unsupported result type string
|
|
//
|
|
//go:wasmimport modulename invalidreturn_string
|
|
func invalidreturn_string() string
|