mirror of https://github.com/golang/go.git
The old code ignored the field alignment, and only looked at the field
offset: if the field offset required padding, cgo added padding. But
while that approach works for Go (at least with the gc toolchain) it
doesn't work for C code using packed structs. With a packed struct the
added padding may leave the struct at a misaligned position, and the
inserted alignment, which cgo is not considering, may introduce
additional, unexpected, padding. Padding that ignores alignment is not
a good idea when the struct is not packed, and Go structs are never
packed. So don't ignore alignment.
Updates #28896
Fixes #28916
Change-Id: Ie50ea15fa6dc35557497097be9fecfecb11efd8a
Reviewed-on: https://go-review.googlesource.com/c/150602
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
(cherry picked from commit
|
||
|---|---|---|
| .. | ||
| android | ||
| arm | ||
| cgo | ||
| chrome/gophertool | ||
| git | ||
| ios | ||
| linkcheck | ||
| nacl | ||
| sortac | ||
| swig | ||
| trace | ||
| wasm | ||
| benchcmp | ||
| editors | ||