mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: fix parameter offset calculation
For struct like { { a int64; b int16 }; c int32 }, on 64-bit
machines the offset of c is 16, as the inner struct takes 16
bytes because we round up type size to its alignment. Update the
abi package's offset calculation to include this.
We only need to do this for struct type, because for all other
types its size is naturally aligned.
TODO: add a test.
Change-Id: I0c661768cb1ed3cb409b20a88b7e23e059f8e3e1
Reviewed-on: https://go-review.googlesource.com/c/go/+/306449
Trust: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
ec721d92bf
commit
5f646f0a98
1 changed files with 1 additions and 0 deletions
|
|
@ -214,6 +214,7 @@ func appendParamOffsets(offsets []int64, at int64, t *types.Type) ([]int64, int6
|
|||
for _, f := range t.FieldSlice() {
|
||||
offsets, at = appendParamOffsets(offsets, at, f.Type)
|
||||
}
|
||||
at = align(at, t) // type size is rounded up to its alignment
|
||||
case types.TSLICE:
|
||||
return appendParamOffsets(offsets, at, synthSlice)
|
||||
case types.TSTRING:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue