Commit c0b8b969 authored by Rob Pike's avatar Rob Pike

Bug in reflect found by gri. Structs in 6g have a minimum alignment.

iant: will this be ok in gccgo?

R=rsc
DELTA=9  (8 added, 0 deleted, 1 changed)
OCL=28059
CL=28062
parent 49eb63cf
...@@ -80,9 +80,13 @@ type allTypes struct { ...@@ -80,9 +80,13 @@ type allTypes struct {
xuintptr uintptr; xuintptr uintptr;
} }
var x allTypes var (
x allTypes;
minStruct struct { uint8 };
)
const ( const (
minStructAlign = unsafe.Sizeof(minStruct) - 1;
ptrsize = unsafe.Sizeof(&x); ptrsize = unsafe.Sizeof(&x);
interfacesize = unsafe.Sizeof(x.xinterface); interfacesize = unsafe.Sizeof(x.xinterface);
) )
...@@ -394,6 +398,10 @@ func (t *structTypeStruct) Size() int { ...@@ -394,6 +398,10 @@ func (t *structTypeStruct) Size() int {
size += elemsize; size += elemsize;
} }
if (structalign > 0) { if (structalign > 0) {
// 6g etc. always aligns structs to a minimum size, typically int64
if structalign < minStructAlign {
structalign = minStructAlign
}
// TODO: In the PPC64 ELF ABI, floating point fields // TODO: In the PPC64 ELF ABI, floating point fields
// in a struct are aligned to a 4-byte boundary, but // in a struct are aligned to a 4-byte boundary, but
// if the first field in the struct is a 64-bit float, // if the first field in the struct is a 64-bit float,
......
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