From a29e1be6ffa41bac1622011d3bb724e06d03c523 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 4 Sep 2017 20:54:29 +0200 Subject: pkg/compiler: fix alignment calculation bug --- pkg/compiler/gen.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'pkg/compiler') diff --git a/pkg/compiler/gen.go b/pkg/compiler/gen.go index 62c36b735..b570c138b 100644 --- a/pkg/compiler/gen.go +++ b/pkg/compiler/gen.go @@ -276,9 +276,7 @@ func (comp *compiler) addAlignment(fields []sys.Type, varlen, packed bool, align } return newFields } - var off uint64 - // TODO(dvyukov): this is wrong: if alignAttr!=0, we must use it, not max - align := alignAttr + var align, off uint64 for i, f := range fields { if i > 0 && !fields[i-1].BitfieldMiddle() { a := comp.typeAlign(f) @@ -300,6 +298,9 @@ func (comp *compiler) addAlignment(fields []sys.Type, varlen, packed bool, align off += f.Size() } } + if alignAttr != 0 { + align = alignAttr + } if align != 0 && off%align != 0 && !varlen { pad := align - off%align off += pad -- cgit mrf-deployment