Commit 4e1d1965 authored by Damien Neil's avatar Damien Neil Committed by Rob Pike

reflect: fix struct size calculation to include terminal padding

LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/160920045
parent 68521aa6
...@@ -2678,6 +2678,26 @@ func TestFuncArg(t *testing.T) { ...@@ -2678,6 +2678,26 @@ func TestFuncArg(t *testing.T) {
} }
} }
func TestStructArg(t *testing.T) {
type padded struct {
B string
C int32
}
var (
gotA padded
gotB uint32
wantA = padded{"3", 4}
wantB = uint32(5)
)
f := func(a padded, b uint32) {
gotA, gotB = a, b
}
ValueOf(f).Call([]Value{ValueOf(wantA), ValueOf(wantB)})
if gotA != wantA || gotB != wantB {
t.Errorf("function called with (%v, %v), want (%v, %v)", gotA, gotB, wantA, wantB)
}
}
var tagGetTests = []struct { var tagGetTests = []struct {
Tag StructTag Tag StructTag
Key string Key string
......
...@@ -1544,6 +1544,7 @@ func (gc *gcProg) appendProg(t *rtype) { ...@@ -1544,6 +1544,7 @@ func (gc *gcProg) appendProg(t *rtype) {
for i := 0; i < c; i++ { for i := 0; i < c; i++ {
gc.appendProg(t.Field(i).Type.common()) gc.appendProg(t.Field(i).Type.common())
} }
gc.align(uintptr(t.align))
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment