runtime: correct runtime structfield type to match reflect
The offset field in structfield has changed to offsetAnon, and now requires a shift to get the actual offset value. Fixes golang/go#23391 Reviewed-on: https://go-review.googlesource.com/92275 From-SVN: r257413
This commit is contained in:
parent
43fbc2e9c4
commit
c88893a0da
3 changed files with 15 additions and 7 deletions
|
@ -1,4 +1,4 @@
|
|||
c02c71187c9794b50444e2858c582e66a3442ee8
|
||||
1927b40e59e7c2067ecb03384b331d1be3cb5eea
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
@ -189,7 +189,7 @@ func cgoCheckArg(t *_type, p unsafe.Pointer, indir, top bool, msg string) {
|
|||
return
|
||||
}
|
||||
for _, f := range st.fields {
|
||||
cgoCheckArg(f.typ, add(p, f.offset), true, top, msg)
|
||||
cgoCheckArg(f.typ, add(p, f.offset()), true, top, msg)
|
||||
}
|
||||
case kindPtr, kindUnsafePointer:
|
||||
if indir {
|
||||
|
|
|
@ -113,11 +113,19 @@ type ptrtype struct {
|
|||
}
|
||||
|
||||
type structfield struct {
|
||||
name *string // nil for embedded fields
|
||||
pkgPath *string // nil for exported Names; otherwise import path
|
||||
typ *_type // type of field
|
||||
tag *string // nil if no tag
|
||||
offset uintptr // byte offset of field within struct
|
||||
name *string // nil for embedded fields
|
||||
pkgPath *string // nil for exported Names; otherwise import path
|
||||
typ *_type // type of field
|
||||
tag *string // nil if no tag
|
||||
offsetAnon uintptr // byte offset of field<<1 | isAnonymous
|
||||
}
|
||||
|
||||
func (f *structfield) offset() uintptr {
|
||||
return f.offsetAnon >> 1
|
||||
}
|
||||
|
||||
func (f *structfield) anon() bool {
|
||||
return f.offsetAnon&1 != 0
|
||||
}
|
||||
|
||||
type structtype struct {
|
||||
|
|
Loading…
Add table
Reference in a new issue