mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
reflect: more function layout tests
Test more stuff: 1) flagNoPointers, an incorrect value was the cause of #9425 2) Total function layout size 3) gc program Change-Id: I73f65fe740215938fa930d2f096febd9db0a0021 Reviewed-on: https://go-review.googlesource.com/2090 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
0d4ea0c70d
commit
108dbd0dc7
2 changed files with 72 additions and 6 deletions
|
|
@ -22,7 +22,7 @@ const PtrSize = ptrSize
|
|||
const BitsPointer = bitsPointer
|
||||
const BitsScalar = bitsScalar
|
||||
|
||||
func FuncLayout(t Type, rcvr Type) (frametype Type, argSize, retOffset uintptr, stack []byte) {
|
||||
func FuncLayout(t Type, rcvr Type) (frametype Type, argSize, retOffset uintptr, stack []byte, gc []byte, ptrs bool) {
|
||||
var ft *rtype
|
||||
var s *bitVector
|
||||
if rcvr != nil {
|
||||
|
|
@ -34,5 +34,13 @@ func FuncLayout(t Type, rcvr Type) (frametype Type, argSize, retOffset uintptr,
|
|||
for i := uint32(0); i < s.n; i += 2 {
|
||||
stack = append(stack, s.data[i/8]>>(i%8)&3)
|
||||
}
|
||||
if ft.kind & kindGCProg != 0 {
|
||||
panic("can't handle gc programs")
|
||||
}
|
||||
gcdata := (*[1000]byte)(ft.gc[0])
|
||||
for i := uintptr(0); i < ft.size/ptrSize; i++ {
|
||||
gc = append(gc, gcdata[i/2] >> (i%2*4+2) & 3)
|
||||
}
|
||||
ptrs = ft.kind & kindNoPointers == 0
|
||||
return
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue