From: Rob Pike Date: Wed, 5 Nov 2008 19:02:55 +0000 (-0800) Subject: minor tweak to still non-portable alignment calculation X-Git-Tag: weekly.2009-11-06~2796 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=44a82746a18dad2ebbbaceeabe098ea1d436dd41;p=gostls13.git minor tweak to still non-portable alignment calculation R=rsc DELTA=4 (1 added, 1 deleted, 2 changed) OCL=18528 CL=18533 --- diff --git a/src/lib/reflect/type.go b/src/lib/reflect/type.go index 899b02f155..2c05901767 100644 --- a/src/lib/reflect/type.go +++ b/src/lib/reflect/type.go @@ -289,12 +289,13 @@ func (t *StructTypeStruct) Size() int { return t.size } size := 0; + structalignmask := 7; // BUG: we know structs are 8-aligned for i := 0; i < len(t.field); i++ { elemsize := t.field[i].typ.Get().Size(); // pad until at (elemsize mod 8) boundary align := elemsize - 1; - if align > 7 { // BUG: we know structs are 8-aligned - align = 7 + if align > structalignmask { + align = structalignmask } if align > 0 { size = (size + align) & ^align; @@ -302,7 +303,6 @@ func (t *StructTypeStruct) Size() int { t.field[i].offset = size; size += elemsize; } - structalignmask := 7; // TODO: knows that size fits in int32 (also can't use const here) size = (size + structalignmask) & ^(structalignmask); t.size = size; return size;