mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 00:30:36 +08:00
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
@ -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…
x
Reference in New Issue
Block a user