tests: test functions with random signatures (#216)
Adds a test for function signature memory layout by generating functions with random signatures. This confirms that the size and offsets computed by `gotypes` agree with `asmdecl`. Updates #191 #195
This commit is contained in:
committed by
GitHub
parent
bcbebd5674
commit
6acd6a048d
78
tests/signature/asm.go
Normal file
78
tests/signature/asm.go
Normal file
@@ -0,0 +1,78 @@
|
||||
//go:build ignore
|
||||
// +build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"go/token"
|
||||
"go/types"
|
||||
"math/rand"
|
||||
|
||||
. "github.com/mmcloughlin/avo/build"
|
||||
. "github.com/mmcloughlin/avo/gotypes"
|
||||
. "github.com/mmcloughlin/avo/reg"
|
||||
)
|
||||
|
||||
var (
|
||||
seed = flag.Int64("seed", 0, "random seed")
|
||||
num = flag.Int("num", 32, "number of test functions to generate")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
rand.Seed(*seed)
|
||||
|
||||
for i := 0; i < *num; i++ {
|
||||
name := fmt.Sprintf("Signature%d", i)
|
||||
sig := RandomSignature()
|
||||
SignatureFunction(name, sig)
|
||||
}
|
||||
|
||||
Generate()
|
||||
}
|
||||
|
||||
func SignatureFunction(name string, sig *types.Signature) {
|
||||
// Declare the function.
|
||||
TEXT(name, 0, sig.String())
|
||||
|
||||
// Write to the results. Otherwise, asmdecl would warn us.
|
||||
regsize := map[int64]Virtual{1: GP8(), 2: GP16(), 4: GP32(), 8: GP64()}
|
||||
rs := sig.Results()
|
||||
for i := 0; i < rs.Len(); i++ {
|
||||
r := rs.At(i)
|
||||
size := Sizes.Sizeof(r.Type())
|
||||
Store(regsize[size], ReturnIndex(i))
|
||||
}
|
||||
|
||||
RET()
|
||||
}
|
||||
|
||||
func RandomSignature() *types.Signature {
|
||||
p := RandomTuple()
|
||||
r := RandomTuple()
|
||||
return types.NewSignature(nil, p, r, false)
|
||||
}
|
||||
|
||||
func RandomTuple() *types.Tuple {
|
||||
n := rand.Intn(5)
|
||||
vs := make([]*types.Var, n)
|
||||
for i := 0; i < n; i++ {
|
||||
t := RandomType()
|
||||
vs[i] = types.NewVar(token.NoPos, nil, "", t)
|
||||
}
|
||||
return types.NewTuple(vs...)
|
||||
}
|
||||
|
||||
func RandomType() types.Type {
|
||||
accept := types.IsInteger | types.IsUnsigned
|
||||
for {
|
||||
t := types.Typ[rand.Intn(len(types.Typ))]
|
||||
info := t.Info()
|
||||
if info != 0 && (info&^accept) == 0 {
|
||||
return t
|
||||
}
|
||||
}
|
||||
}
|
||||
4
tests/signature/gen.go
Normal file
4
tests/signature/gen.go
Normal file
@@ -0,0 +1,4 @@
|
||||
// Package signature tests handling of random function signatures.
|
||||
package signature
|
||||
|
||||
//go:generate go run asm.go -out signature.s -stubs stub.go -seed 42 -num 256
|
||||
1534
tests/signature/signature.s
Normal file
1534
tests/signature/signature.s
Normal file
File diff suppressed because it is too large
Load Diff
515
tests/signature/stub.go
Normal file
515
tests/signature/stub.go
Normal file
@@ -0,0 +1,515 @@
|
||||
// Code generated by command: go run asm.go -out signature.s -stubs stub.go -seed 42 -num 256. DO NOT EDIT.
|
||||
|
||||
package signature
|
||||
|
||||
func Signature0() (uint32, int16)
|
||||
|
||||
func Signature1(int16, uint, uint32) (int64, int8, uint64, int64)
|
||||
|
||||
func Signature2(uint, int16) (uint32, uintptr, int16, uint16)
|
||||
|
||||
func Signature3(uintptr, uint32) uint32
|
||||
|
||||
func Signature4(int64, uint32) (uint16, int64, uint32, int8)
|
||||
|
||||
func Signature5(int8)
|
||||
|
||||
func Signature6(int64)
|
||||
|
||||
func Signature7(uint) (int8, int, uintptr, uintptr)
|
||||
|
||||
func Signature8(uint16) int
|
||||
|
||||
func Signature9(uint32, uint16, uint16) (uintptr, uint16, int8, uint8)
|
||||
|
||||
func Signature10(uint, uint, int64) (int8, uintptr, uint, int32)
|
||||
|
||||
func Signature11() (uint64, int16, uint64, uint)
|
||||
|
||||
func Signature12(uintptr) (uint8, uint8)
|
||||
|
||||
func Signature13() uint8
|
||||
|
||||
func Signature14(int8, uint64, uintptr) int32
|
||||
|
||||
func Signature15(uint32, uint32, int16) (uint64, int)
|
||||
|
||||
func Signature16(uint32) uint16
|
||||
|
||||
func Signature17(int16) (int32, uint, int8, uint8)
|
||||
|
||||
func Signature18(uintptr, uintptr) (uint8, uint32)
|
||||
|
||||
func Signature19(int, uint64, int) (int32, uintptr)
|
||||
|
||||
func Signature20(uint32)
|
||||
|
||||
func Signature21(uint8, int8, uint64) (uint16, uint32)
|
||||
|
||||
func Signature22(int, uint16, uint8, int8) (int8, uint32)
|
||||
|
||||
func Signature23(int32, uint32) (uint8, int16)
|
||||
|
||||
func Signature24(int16, uintptr)
|
||||
|
||||
func Signature25(int8, int32, uint16, uint)
|
||||
|
||||
func Signature26() (uint16, uint64, int)
|
||||
|
||||
func Signature27(uint32) (uint64, uint8)
|
||||
|
||||
func Signature28(uint64, int16, uint8, uintptr) (uint16, uintptr)
|
||||
|
||||
func Signature29(int8, int32, uint64, int64) uint16
|
||||
|
||||
func Signature30(int8, uint16, int32, uint64) uint8
|
||||
|
||||
func Signature31(uint64, uint8, uint32) (int16, uintptr)
|
||||
|
||||
func Signature32(int16, int) (int64, uint64, uintptr, uint16)
|
||||
|
||||
func Signature33(int16, int8, int8)
|
||||
|
||||
func Signature34(uint16, int64)
|
||||
|
||||
func Signature35(int8, uint, uint, int8) uint64
|
||||
|
||||
func Signature36() (uint8, int, uintptr, uintptr)
|
||||
|
||||
func Signature37() (uint16, uint16, uint32, uint16)
|
||||
|
||||
func Signature38(uint8, uint, uint32)
|
||||
|
||||
func Signature39(uint8, int32, int) int16
|
||||
|
||||
func Signature40(int16, int, int16) (int8, uint64)
|
||||
|
||||
func Signature41() (uint, uintptr, uint32)
|
||||
|
||||
func Signature42(uint8, uint8)
|
||||
|
||||
func Signature43() uint8
|
||||
|
||||
func Signature44(int32, int16) uint32
|
||||
|
||||
func Signature45() (uintptr, uintptr, uint8)
|
||||
|
||||
func Signature46(int8) (uint8, uint8, uint, int32)
|
||||
|
||||
func Signature47(uint8) uint
|
||||
|
||||
func Signature48(int32, uint, uintptr, int32) uint8
|
||||
|
||||
func Signature49(uint16, int16)
|
||||
|
||||
func Signature50(int64, int16, uint64, uintptr) (int8, uint, int32)
|
||||
|
||||
func Signature51(int64, uint32, int8)
|
||||
|
||||
func Signature52() (uint8, int32, int64)
|
||||
|
||||
func Signature53() (uint8, uint16)
|
||||
|
||||
func Signature54(uint64, int16, uint64) (int16, int16)
|
||||
|
||||
func Signature55(uint64) (uint, int, uint32, uintptr)
|
||||
|
||||
func Signature56() (int16, uintptr)
|
||||
|
||||
func Signature57(uint32, uint8, uint)
|
||||
|
||||
func Signature58(int, int64)
|
||||
|
||||
func Signature59() uint8
|
||||
|
||||
func Signature60(uintptr, int8, uint8, uint)
|
||||
|
||||
func Signature61(int8, uint16, int8)
|
||||
|
||||
func Signature62() uint8
|
||||
|
||||
func Signature63(int32, int, int64) (int64, uintptr, int32, uint64)
|
||||
|
||||
func Signature64(uint32, uint16, uint8) (int16, int32)
|
||||
|
||||
func Signature65(int32, uint8)
|
||||
|
||||
func Signature66() (int16, uintptr, uint32, uint)
|
||||
|
||||
func Signature67(uint32, uint)
|
||||
|
||||
func Signature68(int32, uint64, uint16) int32
|
||||
|
||||
func Signature69(int) uint
|
||||
|
||||
func Signature70() int64
|
||||
|
||||
func Signature71(int, int8, uint16, uint16) (uint16, uint64)
|
||||
|
||||
func Signature72(uint32, uintptr, uint8) (uint16, int8, int16, uint16)
|
||||
|
||||
func Signature73(int8, uint32, int8, uint) (uint64, int64)
|
||||
|
||||
func Signature74() (int64, uint64, uint16, int64)
|
||||
|
||||
func Signature75(uint16, int) (uintptr, uint, uint32)
|
||||
|
||||
func Signature76() int8
|
||||
|
||||
func Signature77(uint32, uint32)
|
||||
|
||||
func Signature78(int) (uint, int32)
|
||||
|
||||
func Signature79(int16, int64, int32) (int64, uint8)
|
||||
|
||||
func Signature80() (int64, int8, int8)
|
||||
|
||||
func Signature81(uint8, uintptr)
|
||||
|
||||
func Signature82(uint, int32, int64) (uint8, uintptr, uint, uint32)
|
||||
|
||||
func Signature83(uint64, uint) (int8, int, uintptr)
|
||||
|
||||
func Signature84() (uint64, int16)
|
||||
|
||||
func Signature85(uint32, uint64, uint64) (int16, int8, uint64)
|
||||
|
||||
func Signature86(int16, uint64, int64, uint64) (uint64, uint32, uintptr)
|
||||
|
||||
func Signature87(int32, uint8, int32, int8) uintptr
|
||||
|
||||
func Signature88(int, int8, uintptr, int64) (uint8, uint8, int64, int8)
|
||||
|
||||
func Signature89(int64, uint16) (uint8, int, int32)
|
||||
|
||||
func Signature90(uint64) (uint64, uint64, int64)
|
||||
|
||||
func Signature91(uint16, uintptr, int, int64) (int8, uint8, int, int)
|
||||
|
||||
func Signature92(uint32, uint64, uint32, uint) (int8, uint8, uint)
|
||||
|
||||
func Signature93(uint32, uint, int64, int)
|
||||
|
||||
func Signature94(uint64)
|
||||
|
||||
func Signature95() (uint, uintptr, int, uintptr)
|
||||
|
||||
func Signature96(uint8, int16, int32) uint64
|
||||
|
||||
func Signature97(uint, uint, uint) (int8, int, int64)
|
||||
|
||||
func Signature98(int8, int) (int16, int16)
|
||||
|
||||
func Signature99(uint64) (uintptr, int16, uintptr)
|
||||
|
||||
func Signature100(int32) (int, int16, int64, uint32)
|
||||
|
||||
func Signature101() (uint64, uint64, int64, uint8)
|
||||
|
||||
func Signature102(uint32, uint)
|
||||
|
||||
func Signature103() uint16
|
||||
|
||||
func Signature104() (int, uint)
|
||||
|
||||
func Signature105(uint16, int64, int8) uint64
|
||||
|
||||
func Signature106(uint32, int64, uint32, uint8)
|
||||
|
||||
func Signature107(uint64, uintptr) int32
|
||||
|
||||
func Signature108(uint8, int64, uint8, uint32) int64
|
||||
|
||||
func Signature109(uint, uint, uint8, uint32) int
|
||||
|
||||
func Signature110() uint8
|
||||
|
||||
func Signature111(uint32, uint) (int16, uint64, uint32, uint32)
|
||||
|
||||
func Signature112(uint, uintptr, uint16, uint16) (uint32, int16, int64, uint)
|
||||
|
||||
func Signature113(uintptr, int64, uintptr, int32) (int16, int64)
|
||||
|
||||
func Signature114(int32, int64, uint, uint32)
|
||||
|
||||
func Signature115() uint64
|
||||
|
||||
func Signature116() (int64, uint16)
|
||||
|
||||
func Signature117(uintptr, int64, int32, uintptr)
|
||||
|
||||
func Signature118(int32, uint)
|
||||
|
||||
func Signature119(int32, int16) (int16, int64)
|
||||
|
||||
func Signature120(int, uintptr) (uint8, uint16, int)
|
||||
|
||||
func Signature121(uint32, int32)
|
||||
|
||||
func Signature122() int32
|
||||
|
||||
func Signature123() (uint, uint, int32)
|
||||
|
||||
func Signature124(uint64, int32, uint32) (uint32, uint32, uint8)
|
||||
|
||||
func Signature125(uint32, uint64)
|
||||
|
||||
func Signature126(uint, uint8, uint64) int8
|
||||
|
||||
func Signature127(uint64, uint8) (uintptr, uint32)
|
||||
|
||||
func Signature128(uint64)
|
||||
|
||||
func Signature129() (uint64, uint8, int8)
|
||||
|
||||
func Signature130(uint, uint8, uint, int64) (uint64, uint8)
|
||||
|
||||
func Signature131() (uint8, uint32, uint16)
|
||||
|
||||
func Signature132() (int64, int64, int, uint64)
|
||||
|
||||
func Signature133(uint64, uint8, int64, uint32) (uint32, uint8, int32)
|
||||
|
||||
func Signature134(int32) uintptr
|
||||
|
||||
func Signature135(uint16) (uintptr, int32, int, uint8)
|
||||
|
||||
func Signature136(int64)
|
||||
|
||||
func Signature137(uint8, uint16, int, int8) int64
|
||||
|
||||
func Signature138()
|
||||
|
||||
func Signature139() (int, uint8, uint32)
|
||||
|
||||
func Signature140(uint32, int16) int8
|
||||
|
||||
func Signature141(uint16) (uintptr, uint32, uint64)
|
||||
|
||||
func Signature142(int, int64) (uint64, int8)
|
||||
|
||||
func Signature143(int) (int64, int, int, int32)
|
||||
|
||||
func Signature144(uint64, int16, int8, int16) (int16, uint64, int32)
|
||||
|
||||
func Signature145() (int, int64)
|
||||
|
||||
func Signature146() (uint, int64, int8, uint32)
|
||||
|
||||
func Signature147(int16)
|
||||
|
||||
func Signature148(uint, uint32) (uint8, int32, uint16, uint)
|
||||
|
||||
func Signature149(uint64, uint64, int, int8) (uintptr, int, uint64)
|
||||
|
||||
func Signature150(uint32, int32) (int16, uintptr, uint16)
|
||||
|
||||
func Signature151(uint32, int16) (int, uint, uint)
|
||||
|
||||
func Signature152() (uint, int32, int64)
|
||||
|
||||
func Signature153(uint8, uint16, uint64, uint) int
|
||||
|
||||
func Signature154(uint, int, int32, int64) (uint, int8, int16, uintptr)
|
||||
|
||||
func Signature155(int16, uint16) (uint, int16, uint, int16)
|
||||
|
||||
func Signature156(int64)
|
||||
|
||||
func Signature157(int64, uint16, uint16) (uint, int64)
|
||||
|
||||
func Signature158() (int32, uint64, int64)
|
||||
|
||||
func Signature159(int, uint)
|
||||
|
||||
func Signature160() int
|
||||
|
||||
func Signature161(uint, int32, uint64, int16) (uint32, int32, uint, uintptr)
|
||||
|
||||
func Signature162(uintptr, int, int) (int16, int8)
|
||||
|
||||
func Signature163(int32) uintptr
|
||||
|
||||
func Signature164(uintptr) (int64, uint, uint8, uint64)
|
||||
|
||||
func Signature165(int16, uintptr) (int8, int, int16)
|
||||
|
||||
func Signature166(int16) uint16
|
||||
|
||||
func Signature167(uint32, int, int64) (int, uint16, int8, uintptr)
|
||||
|
||||
func Signature168(int32, uint16) (uint16, uint16, uint16)
|
||||
|
||||
func Signature169(uint32, uint8, int64)
|
||||
|
||||
func Signature170(uint16, uintptr, uintptr, uintptr) (int, uint8, uint64)
|
||||
|
||||
func Signature171()
|
||||
|
||||
func Signature172(int32, uint32) (int8, int64)
|
||||
|
||||
func Signature173(uint8, uint64)
|
||||
|
||||
func Signature174() uint8
|
||||
|
||||
func Signature175(uint) (uint32, uint32, uint8, int8)
|
||||
|
||||
func Signature176(uintptr, uintptr, int, uint8)
|
||||
|
||||
func Signature177(uint, uint) (int16, uintptr)
|
||||
|
||||
func Signature178() int8
|
||||
|
||||
func Signature179(int32, int32, int8) (int8, uintptr)
|
||||
|
||||
func Signature180(uintptr, uint16) (int64, uint8, uintptr, int64)
|
||||
|
||||
func Signature181() (int8, uintptr)
|
||||
|
||||
func Signature182(int32, uint32) (uintptr, int, uint, uint)
|
||||
|
||||
func Signature183() int
|
||||
|
||||
func Signature184(int)
|
||||
|
||||
func Signature185(int16, uint8, int16) uint64
|
||||
|
||||
func Signature186(int, int32) (int64, int16, uint8)
|
||||
|
||||
func Signature187(uint64) (uint32, int)
|
||||
|
||||
func Signature188() (int8, uint)
|
||||
|
||||
func Signature189(int8, uint)
|
||||
|
||||
func Signature190() int64
|
||||
|
||||
func Signature191(uint16, uint) uint16
|
||||
|
||||
func Signature192() (uint16, int32, int)
|
||||
|
||||
func Signature193(uint8, int, int32) (int8, uintptr, uint64, int)
|
||||
|
||||
func Signature194(uint16, uint64, uint8) (int, int8, uint)
|
||||
|
||||
func Signature195(int, uint) (int32, int, int8)
|
||||
|
||||
func Signature196(uint16) (uintptr, uint32)
|
||||
|
||||
func Signature197(uintptr, int32) (int64, int16)
|
||||
|
||||
func Signature198(uint8) (uint8, int16, uint32)
|
||||
|
||||
func Signature199(uint)
|
||||
|
||||
func Signature200(uintptr) uintptr
|
||||
|
||||
func Signature201(uint64, int8) (uint8, int8, int16, uintptr)
|
||||
|
||||
func Signature202(uint16, uint64, int8, uint) (uint, uint64, uintptr, int16)
|
||||
|
||||
func Signature203(int16, int8, uint, int8)
|
||||
|
||||
func Signature204(int16, int32, uint) (uint8, int64, uintptr)
|
||||
|
||||
func Signature205(int, int8, int16, int16) (uintptr, uint64, uint64, uintptr)
|
||||
|
||||
func Signature206() (int8, int, uint32)
|
||||
|
||||
func Signature207(uint16) (int32, uint16)
|
||||
|
||||
func Signature208(int32, uintptr, int8, int32) (uint8, uint, int16)
|
||||
|
||||
func Signature209(int8, int16)
|
||||
|
||||
func Signature210(int) (uint64, uint64, int8)
|
||||
|
||||
func Signature211(uint32, uint, uintptr) (uint32, uint64, uint8)
|
||||
|
||||
func Signature212(uint8, int8, int) uint8
|
||||
|
||||
func Signature213(uint16, uintptr) (uint64, uint16, int)
|
||||
|
||||
func Signature214(uint16, uintptr, int8) (int16, int64, int)
|
||||
|
||||
func Signature215(int16, int8) uintptr
|
||||
|
||||
func Signature216() (int16, uint16)
|
||||
|
||||
func Signature217(int32, uint, int) (uint32, int64, uint)
|
||||
|
||||
func Signature218() (int16, uint16, int16, uint32)
|
||||
|
||||
func Signature219(int32, int32) (uint16, uint8)
|
||||
|
||||
func Signature220(uint8, int64) (uint64, int32)
|
||||
|
||||
func Signature221(uintptr, int, int8) uint64
|
||||
|
||||
func Signature222() uintptr
|
||||
|
||||
func Signature223(uint16, uint8, uint16, uint8) (uint32, int32)
|
||||
|
||||
func Signature224(int16, int8, int8, uint32)
|
||||
|
||||
func Signature225(uintptr, int64) (int32, int, uintptr)
|
||||
|
||||
func Signature226(uint64) int64
|
||||
|
||||
func Signature227() (int64, int32, uintptr)
|
||||
|
||||
func Signature228(int16, int64, int16, int64)
|
||||
|
||||
func Signature229(int32, int, uint64, int64) (int, uint, uintptr, uint16)
|
||||
|
||||
func Signature230() (uintptr, uint64)
|
||||
|
||||
func Signature231() (int8, uint32, int, int16)
|
||||
|
||||
func Signature232()
|
||||
|
||||
func Signature233(uint16, uint8, int16) (uint8, int16, uint64, int64)
|
||||
|
||||
func Signature234(int8, uint8, int8) (uint8, uint8, uintptr)
|
||||
|
||||
func Signature235(int16, uint) (int64, uint16, uint32)
|
||||
|
||||
func Signature236(uint64, uint, int32, int8)
|
||||
|
||||
func Signature237(uint32, int32, int, uintptr) (int16, int64, int32)
|
||||
|
||||
func Signature238(int8, uint16)
|
||||
|
||||
func Signature239() (uint64, int8)
|
||||
|
||||
func Signature240(uint, int32, uint64) uint64
|
||||
|
||||
func Signature241(int64, uint, uint8)
|
||||
|
||||
func Signature242(int64, int8, uint32) (int32, uint, uint32, uint64)
|
||||
|
||||
func Signature243(uint, uint16) uint16
|
||||
|
||||
func Signature244() (uintptr, int, uint8)
|
||||
|
||||
func Signature245(int64, int16)
|
||||
|
||||
func Signature246(int64, uint16, uint8) (uint16, uint, uint)
|
||||
|
||||
func Signature247(uint32, uintptr) (int32, int32)
|
||||
|
||||
func Signature248(int16, int16) (uint, int32)
|
||||
|
||||
func Signature249() (uint32, uint16, uint)
|
||||
|
||||
func Signature250(int64, uintptr) (uint64, uint16)
|
||||
|
||||
func Signature251(int64, int32, int, int64) uintptr
|
||||
|
||||
func Signature252(int) uint16
|
||||
|
||||
func Signature253(int8, uint) (int, uint16, int64)
|
||||
|
||||
func Signature254(uint32) (int8, int32)
|
||||
|
||||
func Signature255(uint8, uint64, int8, int8) (int16, uint16, uint32, int16)
|
||||
Reference in New Issue
Block a user