diff --git a/ssa/type.go b/ssa/type.go index 3b6e85f9..67c0ca17 100644 --- a/ssa/type.go +++ b/ssa/type.go @@ -114,7 +114,7 @@ func (p *goProgram) Offsetsof(fields []*types.Var) (ret []int64) { func (p *goProgram) Sizeof(T types.Type) int64 { prog := Program(p) ptrSize := int64(prog.PointerSize()) - return prog.sizes.Sizeof(T) + extraSize(T, ptrSize) + return align((prog.sizes.Sizeof(T) + extraSize(T, ptrSize)), prog.sizes.Alignof(T)) } func extraSize(t types.Type, ptrSize int64) (ret int64) { @@ -134,6 +134,10 @@ func extraSize(t types.Type, ptrSize int64) (ret int64) { return 0 } +func align(x, a int64) int64 { + return (x + a - 1) &^ (a - 1) +} + // ----------------------------------------------------------------------------- type rawType struct {