mirror of
https://github.com/golang/go.git
synced 2024-09-22 02:48:50 +00:00
test/abi: clean up test to fix builders
go.mod file was not tidy, made builders sad. Updates #40724. Change-Id: I28371a1093108f9ec473eb20bb4d185e35dee67d Reviewed-on: https://go-review.googlesource.com/c/go/+/308590 Trust: David Chase <drchase@google.com> Run-TryBot: David Chase <drchase@google.com> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
23e1d36a87
commit
d474b6c824
@ -1,71 +0,0 @@
|
|||||||
package genCaller42
|
|
||||||
|
|
||||||
import "bad_select_crash.dir/genChecker42"
|
|
||||||
import "bad_select_crash.dir/genUtils"
|
|
||||||
import "reflect"
|
|
||||||
|
|
||||||
|
|
||||||
func Caller2() {
|
|
||||||
genUtils.BeginFcn()
|
|
||||||
c0 := genChecker42.StructF2S0{F0: genChecker42.ArrayF2S1E1{genChecker42.New_3(float64(-0.4418990509835844))}}
|
|
||||||
c1 := genChecker42.ArrayF2S2E1{genChecker42.StructF2S1{/* _: "(z̽|" */F1: ""}}
|
|
||||||
c2 := int16(4162)
|
|
||||||
c3 := float32(-7.667096e+37)
|
|
||||||
c4 := int64(3202175648847048679)
|
|
||||||
var p0 genChecker42.ArrayF2S0E0
|
|
||||||
p0 = genChecker42.ArrayF2S0E0{}
|
|
||||||
var p1 uint8
|
|
||||||
p1 = uint8(57)
|
|
||||||
var p2 uint16
|
|
||||||
p2 = uint16(10920)
|
|
||||||
var p3 float64
|
|
||||||
p3 = float64(-1.597256501942112)
|
|
||||||
genUtils.Mode = ""
|
|
||||||
// 5 returns 4 params
|
|
||||||
r0, r1, r2, r3, r4 := genChecker42.Test2(p0, p1, p2, p3)
|
|
||||||
if !genChecker42.EqualStructF2S0(r0, c0) {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 0, true, uint64(0))
|
|
||||||
}
|
|
||||||
if r1 != c1 {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 1, true, uint64(0))
|
|
||||||
}
|
|
||||||
if r2 != c2 {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 2, true, uint64(0))
|
|
||||||
}
|
|
||||||
if r3 != c3 {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 3, true, uint64(0))
|
|
||||||
}
|
|
||||||
if r4 != c4 {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 4, true, uint64(0))
|
|
||||||
}
|
|
||||||
// same call via reflection
|
|
||||||
genUtils.Mode = "reflect"
|
|
||||||
rc := reflect.ValueOf(genChecker42.Test2)
|
|
||||||
rvslice := rc.Call([]reflect.Value{reflect.ValueOf(p0), reflect.ValueOf(p1), reflect.ValueOf(p2), reflect.ValueOf(p3)})
|
|
||||||
rr0i := rvslice[0].Interface()
|
|
||||||
rr0v:= rr0i.( genChecker42.StructF2S0)
|
|
||||||
if !genChecker42.EqualStructF2S0(rr0v, c0) {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 0, true, uint64(0))
|
|
||||||
}
|
|
||||||
rr1i := rvslice[1].Interface()
|
|
||||||
rr1v:= rr1i.( genChecker42.ArrayF2S2E1)
|
|
||||||
if rr1v != c1 {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 1, true, uint64(0))
|
|
||||||
}
|
|
||||||
rr2i := rvslice[2].Interface()
|
|
||||||
rr2v:= rr2i.( int16)
|
|
||||||
if rr2v != c2 {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 2, true, uint64(0))
|
|
||||||
}
|
|
||||||
rr3i := rvslice[3].Interface()
|
|
||||||
rr3v:= rr3i.( float32)
|
|
||||||
if rr3v != c3 {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 3, true, uint64(0))
|
|
||||||
}
|
|
||||||
rr4i := rvslice[4].Interface()
|
|
||||||
rr4v:= rr4i.( int64)
|
|
||||||
if rr4v != c4 {
|
|
||||||
genUtils.NoteFailure(9, 42, 2, "genChecker42", "return", 4, true, uint64(0))
|
|
||||||
}
|
|
||||||
genUtils.EndFcn()
|
|
||||||
}
|
|
@ -1,135 +0,0 @@
|
|||||||
package genChecker42
|
|
||||||
|
|
||||||
import "bad_select_crash.dir/genUtils"
|
|
||||||
|
|
||||||
type StructF0S0 struct {
|
|
||||||
}
|
|
||||||
|
|
||||||
type ArrayF0S0E2 [2]int16
|
|
||||||
|
|
||||||
type ArrayF0S1E1 [1]StructF0S0
|
|
||||||
|
|
||||||
type StructF1S0 struct {
|
|
||||||
F0 StructF1S1
|
|
||||||
_ ArrayF1S0E4
|
|
||||||
}
|
|
||||||
|
|
||||||
type StructF1S1 struct {
|
|
||||||
}
|
|
||||||
|
|
||||||
type StructF1S2 struct {
|
|
||||||
F0 uint32
|
|
||||||
F1 uint8
|
|
||||||
F2 string
|
|
||||||
F3 string
|
|
||||||
F4 ArrayF1S1E1
|
|
||||||
}
|
|
||||||
|
|
||||||
type StructF1S3 struct {
|
|
||||||
F0 float64
|
|
||||||
}
|
|
||||||
|
|
||||||
type StructF1S4 struct {
|
|
||||||
_ int32
|
|
||||||
F1 float32
|
|
||||||
}
|
|
||||||
|
|
||||||
type StructF1S5 struct {
|
|
||||||
F0 uint16
|
|
||||||
}
|
|
||||||
|
|
||||||
type StructF1S6 struct {
|
|
||||||
F0 uint8
|
|
||||||
F1 uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
type ArrayF1S0E4 [4]float64
|
|
||||||
|
|
||||||
type ArrayF1S1E1 [1]StructF1S3
|
|
||||||
|
|
||||||
type ArrayF1S2E2 [2]StructF1S4
|
|
||||||
|
|
||||||
type ArrayF1S3E2 [2]StructF1S5
|
|
||||||
|
|
||||||
type ArrayF1S4E4 [4]ArrayF1S5E3
|
|
||||||
|
|
||||||
type ArrayF1S5E3 [3]string
|
|
||||||
|
|
||||||
type ArrayF1S6E1 [1]float64
|
|
||||||
|
|
||||||
type StructF2S0 struct {
|
|
||||||
F0 ArrayF2S1E1
|
|
||||||
}
|
|
||||||
|
|
||||||
// equal func for StructF2S0
|
|
||||||
//go:noinline
|
|
||||||
func EqualStructF2S0(left StructF2S0, right StructF2S0) bool {
|
|
||||||
return EqualArrayF2S1E1(left.F0, right.F0)
|
|
||||||
}
|
|
||||||
|
|
||||||
type StructF2S1 struct {
|
|
||||||
_ string
|
|
||||||
F1 string
|
|
||||||
}
|
|
||||||
|
|
||||||
type ArrayF2S0E0 [0]int8
|
|
||||||
|
|
||||||
type ArrayF2S1E1 [1]*float64
|
|
||||||
|
|
||||||
// equal func for ArrayF2S1E1
|
|
||||||
//go:noinline
|
|
||||||
func EqualArrayF2S1E1(left ArrayF2S1E1, right ArrayF2S1E1) bool {
|
|
||||||
return *left[0] == *right[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
type ArrayF2S2E1 [1]StructF2S1
|
|
||||||
|
|
||||||
// 5 returns 4 params
|
|
||||||
//go:registerparams
|
|
||||||
//go:noinline
|
|
||||||
func Test2(p0 ArrayF2S0E0, p1 uint8, _ uint16, p3 float64) (r0 StructF2S0, r1 ArrayF2S2E1, r2 int16, r3 float32, r4 int64) {
|
|
||||||
// consume some stack space, so as to trigger morestack
|
|
||||||
var pad [16]uint64
|
|
||||||
pad[genUtils.FailCount&0x1]++
|
|
||||||
rc0 := StructF2S0{F0: ArrayF2S1E1{New_3(float64(-0.4418990509835844))}}
|
|
||||||
rc1 := ArrayF2S2E1{StructF2S1{/* _: "(z̽|" */F1: ""}}
|
|
||||||
rc2 := int16(4162)
|
|
||||||
rc3 := float32(-7.667096e+37)
|
|
||||||
rc4 := int64(3202175648847048679)
|
|
||||||
p1f0c := uint8(57)
|
|
||||||
if p1 != p1f0c {
|
|
||||||
genUtils.NoteFailureElem(9, 42, 2, "genChecker42", "parm", 1, 0, false, pad[0])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
_ = uint16(10920)
|
|
||||||
p3f0c := float64(-1.597256501942112)
|
|
||||||
if p3 != p3f0c {
|
|
||||||
genUtils.NoteFailureElem(9, 42, 2, "genChecker42", "parm", 3, 0, false, pad[0])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer func(p0 ArrayF2S0E0, p1 uint8) {
|
|
||||||
// check parm passed
|
|
||||||
// check parm passed
|
|
||||||
if p1 != p1f0c {
|
|
||||||
genUtils.NoteFailureElem(9, 42, 2, "genChecker42", "parm", 1, 0, false, pad[0])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// check parm captured
|
|
||||||
if p3 != p3f0c {
|
|
||||||
genUtils.NoteFailureElem(9, 42, 2, "genChecker42", "parm", 3, 0, false, pad[0])
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} (p0, p1)
|
|
||||||
|
|
||||||
return rc0, rc1, rc2, rc3, rc4
|
|
||||||
// 0 addr-taken params, 0 addr-taken returns
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//go:noinline
|
|
||||||
func New_3(i float64) *float64 {
|
|
||||||
x := new( float64)
|
|
||||||
*x = i
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bad_select_crash.dir/genCaller42"
|
|
||||||
"bad_select_crash.dir/genUtils"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
// Only print if there is a problem
|
|
||||||
genCaller42.Caller2()
|
|
||||||
if genUtils.FailCount != 0 {
|
|
||||||
fmt.Fprintf(os.Stderr, "FAILURES: %d\n", genUtils.FailCount)
|
|
||||||
os.Exit(2)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,61 +0,0 @@
|
|||||||
package genUtils
|
|
||||||
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
import "os"
|
|
||||||
|
|
||||||
var ParamFailCount int
|
|
||||||
|
|
||||||
var ReturnFailCount int
|
|
||||||
|
|
||||||
var FailCount int
|
|
||||||
|
|
||||||
var Mode string
|
|
||||||
|
|
||||||
type UtilsType int
|
|
||||||
|
|
||||||
//go:noinline
|
|
||||||
func NoteFailure(cm int, pidx int, fidx int, pkg string, pref string, parmNo int, isret bool,_ uint64) {
|
|
||||||
if isret {
|
|
||||||
if ParamFailCount != 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ReturnFailCount++
|
|
||||||
} else {
|
|
||||||
ParamFailCount++
|
|
||||||
}
|
|
||||||
fmt.Fprintf(os.Stderr, "Error: fail %s |%d|%d|%d| =%s.Test%d= %s %d\n", Mode, cm, pidx, fidx, pkg, fidx, pref, parmNo)
|
|
||||||
|
|
||||||
if (ParamFailCount + FailCount + ReturnFailCount > 9999) {
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:noinline
|
|
||||||
func NoteFailureElem(cm int, pidx int, fidx int, pkg string, pref string, parmNo int, elem int, isret bool, _ uint64) {
|
|
||||||
|
|
||||||
if isret {
|
|
||||||
if ParamFailCount != 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ReturnFailCount++
|
|
||||||
} else {
|
|
||||||
ParamFailCount++
|
|
||||||
}
|
|
||||||
fmt.Fprintf(os.Stderr, "Error: fail %s |%d|%d|%d| =%s.Test%d= %s %d elem %d\n", Mode, cm, pidx, fidx, pkg, fidx, pref, parmNo, elem)
|
|
||||||
|
|
||||||
if (ParamFailCount + FailCount + ReturnFailCount > 9999) {
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BeginFcn() {
|
|
||||||
ParamFailCount = 0
|
|
||||||
ReturnFailCount = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func EndFcn() {
|
|
||||||
FailCount += ParamFailCount
|
|
||||||
FailCount += ReturnFailCount
|
|
||||||
}
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
module bad_select_crash.dir
|
|
||||||
go 1.14
|
|
@ -1,2 +1,272 @@
|
|||||||
// runindir -goexperiment regabi,regabiargs
|
// build -goexperiment regabi,regabiargs
|
||||||
|
|
||||||
|
// Copyright 2021 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.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"reflect"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
// Only print if there is a problem
|
||||||
|
Caller2()
|
||||||
|
if FailCount != 0 {
|
||||||
|
fmt.Fprintf(os.Stderr, "FAILURES: %d\n", FailCount)
|
||||||
|
os.Exit(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var ParamFailCount int
|
||||||
|
|
||||||
|
var ReturnFailCount int
|
||||||
|
|
||||||
|
var FailCount int
|
||||||
|
|
||||||
|
var Mode string
|
||||||
|
|
||||||
|
type UtilsType int
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
|
func NoteFailure(cm int, pidx int, fidx int, pkg string, pref string, parmNo int, isret bool, _ uint64) {
|
||||||
|
if isret {
|
||||||
|
if ParamFailCount != 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ReturnFailCount++
|
||||||
|
} else {
|
||||||
|
ParamFailCount++
|
||||||
|
}
|
||||||
|
fmt.Fprintf(os.Stderr, "Error: fail %s |%d|%d|%d| =%s.Test%d= %s %d\n", Mode, cm, pidx, fidx, pkg, fidx, pref, parmNo)
|
||||||
|
|
||||||
|
if ParamFailCount+FailCount+ReturnFailCount > 9999 {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
|
func NoteFailureElem(cm int, pidx int, fidx int, pkg string, pref string, parmNo int, elem int, isret bool, _ uint64) {
|
||||||
|
|
||||||
|
if isret {
|
||||||
|
if ParamFailCount != 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ReturnFailCount++
|
||||||
|
} else {
|
||||||
|
ParamFailCount++
|
||||||
|
}
|
||||||
|
fmt.Fprintf(os.Stderr, "Error: fail %s |%d|%d|%d| =%s.Test%d= %s %d elem %d\n", Mode, cm, pidx, fidx, pkg, fidx, pref, parmNo, elem)
|
||||||
|
|
||||||
|
if ParamFailCount+FailCount+ReturnFailCount > 9999 {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BeginFcn() {
|
||||||
|
ParamFailCount = 0
|
||||||
|
ReturnFailCount = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func EndFcn() {
|
||||||
|
FailCount += ParamFailCount
|
||||||
|
FailCount += ReturnFailCount
|
||||||
|
}
|
||||||
|
|
||||||
|
func Caller2() {
|
||||||
|
BeginFcn()
|
||||||
|
c0 := StructF2S0{F0: ArrayF2S1E1{New_3(float64(-0.4418990509835844))}}
|
||||||
|
c1 := ArrayF2S2E1{StructF2S1{ /* _: "(z̽|" */ F1: ""}}
|
||||||
|
c2 := int16(4162)
|
||||||
|
c3 := float32(-7.667096e+37)
|
||||||
|
c4 := int64(3202175648847048679)
|
||||||
|
var p0 ArrayF2S0E0
|
||||||
|
p0 = ArrayF2S0E0{}
|
||||||
|
var p1 uint8
|
||||||
|
p1 = uint8(57)
|
||||||
|
var p2 uint16
|
||||||
|
p2 = uint16(10920)
|
||||||
|
var p3 float64
|
||||||
|
p3 = float64(-1.597256501942112)
|
||||||
|
Mode = ""
|
||||||
|
// 5 returns 4 params
|
||||||
|
r0, r1, r2, r3, r4 := Test2(p0, p1, p2, p3)
|
||||||
|
if !EqualStructF2S0(r0, c0) {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 0, true, uint64(0))
|
||||||
|
}
|
||||||
|
if r1 != c1 {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 1, true, uint64(0))
|
||||||
|
}
|
||||||
|
if r2 != c2 {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 2, true, uint64(0))
|
||||||
|
}
|
||||||
|
if r3 != c3 {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 3, true, uint64(0))
|
||||||
|
}
|
||||||
|
if r4 != c4 {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 4, true, uint64(0))
|
||||||
|
}
|
||||||
|
// same call via reflection
|
||||||
|
Mode = "reflect"
|
||||||
|
rc := reflect.ValueOf(Test2)
|
||||||
|
rvslice := rc.Call([]reflect.Value{reflect.ValueOf(p0), reflect.ValueOf(p1), reflect.ValueOf(p2), reflect.ValueOf(p3)})
|
||||||
|
rr0i := rvslice[0].Interface()
|
||||||
|
rr0v := rr0i.(StructF2S0)
|
||||||
|
if !EqualStructF2S0(rr0v, c0) {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 0, true, uint64(0))
|
||||||
|
}
|
||||||
|
rr1i := rvslice[1].Interface()
|
||||||
|
rr1v := rr1i.(ArrayF2S2E1)
|
||||||
|
if rr1v != c1 {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 1, true, uint64(0))
|
||||||
|
}
|
||||||
|
rr2i := rvslice[2].Interface()
|
||||||
|
rr2v := rr2i.(int16)
|
||||||
|
if rr2v != c2 {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 2, true, uint64(0))
|
||||||
|
}
|
||||||
|
rr3i := rvslice[3].Interface()
|
||||||
|
rr3v := rr3i.(float32)
|
||||||
|
if rr3v != c3 {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 3, true, uint64(0))
|
||||||
|
}
|
||||||
|
rr4i := rvslice[4].Interface()
|
||||||
|
rr4v := rr4i.(int64)
|
||||||
|
if rr4v != c4 {
|
||||||
|
NoteFailure(9, 42, 2, "genChecker42", "return", 4, true, uint64(0))
|
||||||
|
}
|
||||||
|
EndFcn()
|
||||||
|
}
|
||||||
|
|
||||||
|
type StructF0S0 struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type ArrayF0S0E2 [2]int16
|
||||||
|
|
||||||
|
type ArrayF0S1E1 [1]StructF0S0
|
||||||
|
|
||||||
|
type StructF1S0 struct {
|
||||||
|
F0 StructF1S1
|
||||||
|
_ ArrayF1S0E4
|
||||||
|
}
|
||||||
|
|
||||||
|
type StructF1S1 struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type StructF1S2 struct {
|
||||||
|
F0 uint32
|
||||||
|
F1 uint8
|
||||||
|
F2 string
|
||||||
|
F3 string
|
||||||
|
F4 ArrayF1S1E1
|
||||||
|
}
|
||||||
|
|
||||||
|
type StructF1S3 struct {
|
||||||
|
F0 float64
|
||||||
|
}
|
||||||
|
|
||||||
|
type StructF1S4 struct {
|
||||||
|
_ int32
|
||||||
|
F1 float32
|
||||||
|
}
|
||||||
|
|
||||||
|
type StructF1S5 struct {
|
||||||
|
F0 uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
type StructF1S6 struct {
|
||||||
|
F0 uint8
|
||||||
|
F1 uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type ArrayF1S0E4 [4]float64
|
||||||
|
|
||||||
|
type ArrayF1S1E1 [1]StructF1S3
|
||||||
|
|
||||||
|
type ArrayF1S2E2 [2]StructF1S4
|
||||||
|
|
||||||
|
type ArrayF1S3E2 [2]StructF1S5
|
||||||
|
|
||||||
|
type ArrayF1S4E4 [4]ArrayF1S5E3
|
||||||
|
|
||||||
|
type ArrayF1S5E3 [3]string
|
||||||
|
|
||||||
|
type ArrayF1S6E1 [1]float64
|
||||||
|
|
||||||
|
type StructF2S0 struct {
|
||||||
|
F0 ArrayF2S1E1
|
||||||
|
}
|
||||||
|
|
||||||
|
// equal func for StructF2S0
|
||||||
|
//go:noinline
|
||||||
|
func EqualStructF2S0(left StructF2S0, right StructF2S0) bool {
|
||||||
|
return EqualArrayF2S1E1(left.F0, right.F0)
|
||||||
|
}
|
||||||
|
|
||||||
|
type StructF2S1 struct {
|
||||||
|
_ string
|
||||||
|
F1 string
|
||||||
|
}
|
||||||
|
|
||||||
|
type ArrayF2S0E0 [0]int8
|
||||||
|
|
||||||
|
type ArrayF2S1E1 [1]*float64
|
||||||
|
|
||||||
|
// equal func for ArrayF2S1E1
|
||||||
|
//go:noinline
|
||||||
|
func EqualArrayF2S1E1(left ArrayF2S1E1, right ArrayF2S1E1) bool {
|
||||||
|
return *left[0] == *right[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
type ArrayF2S2E1 [1]StructF2S1
|
||||||
|
|
||||||
|
// 5 returns 4 params
|
||||||
|
//go:registerparams
|
||||||
|
//go:noinline
|
||||||
|
func Test2(p0 ArrayF2S0E0, p1 uint8, _ uint16, p3 float64) (r0 StructF2S0, r1 ArrayF2S2E1, r2 int16, r3 float32, r4 int64) {
|
||||||
|
// consume some stack space, so as to trigger morestack
|
||||||
|
var pad [16]uint64
|
||||||
|
pad[FailCount&0x1]++
|
||||||
|
rc0 := StructF2S0{F0: ArrayF2S1E1{New_3(float64(-0.4418990509835844))}}
|
||||||
|
rc1 := ArrayF2S2E1{StructF2S1{ /* _: "(z̽|" */ F1: ""}}
|
||||||
|
rc2 := int16(4162)
|
||||||
|
rc3 := float32(-7.667096e+37)
|
||||||
|
rc4 := int64(3202175648847048679)
|
||||||
|
p1f0c := uint8(57)
|
||||||
|
if p1 != p1f0c {
|
||||||
|
NoteFailureElem(9, 42, 2, "genChecker42", "parm", 1, 0, false, pad[0])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_ = uint16(10920)
|
||||||
|
p3f0c := float64(-1.597256501942112)
|
||||||
|
if p3 != p3f0c {
|
||||||
|
NoteFailureElem(9, 42, 2, "genChecker42", "parm", 3, 0, false, pad[0])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer func(p0 ArrayF2S0E0, p1 uint8) {
|
||||||
|
// check parm passed
|
||||||
|
// check parm passed
|
||||||
|
if p1 != p1f0c {
|
||||||
|
NoteFailureElem(9, 42, 2, "genChecker42", "parm", 1, 0, false, pad[0])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// check parm captured
|
||||||
|
if p3 != p3f0c {
|
||||||
|
NoteFailureElem(9, 42, 2, "genChecker42", "parm", 3, 0, false, pad[0])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}(p0, p1)
|
||||||
|
|
||||||
|
return rc0, rc1, rc2, rc3, rc4
|
||||||
|
// 0 addr-taken params, 0 addr-taken returns
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
|
func New_3(i float64) *float64 {
|
||||||
|
x := new(float64)
|
||||||
|
*x = i
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user