diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-09-04 20:54:29 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-09-04 20:54:29 +0200 |
| commit | a29e1be6ffa41bac1622011d3bb724e06d03c523 (patch) | |
| tree | 4d6fd1cc9b011bd4903035b80afd1d907fcbe605 /pkg/compiler | |
| parent | 1c0d4caf7c7a6ddd5cf24091249448bf2e169495 (diff) | |
pkg/compiler: fix alignment calculation bug
Diffstat (limited to 'pkg/compiler')
| -rw-r--r-- | pkg/compiler/gen.go | 7 |
1 files changed, 4 insertions, 3 deletions
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 |
