From 9d963ea599613fa3c2ebef9e3faaad277bab26a3 Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Tue, 17 Jan 2017 18:09:55 +0100 Subject: prog: fix Size() for unions args --- prog/prog.go | 6 +++++- sys/decl.go | 4 ++-- sysgen/sysgen.go | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/prog/prog.go b/prog/prog.go index cdc2dfe3c..cd8f43d32 100644 --- a/prog/prog.go +++ b/prog/prog.go @@ -116,7 +116,11 @@ func (a *Arg) Size() uintptr { } return size case *sys.UnionType: - return a.Option.Size() + if !typ.Varlen { + return typ.Size() + } else { + return a.Option.Size() + } case *sys.ArrayType: var size uintptr for _, in := range a.Inner { diff --git a/sys/decl.go b/sys/decl.go index de3554dbf..6c756fa07 100644 --- a/sys/decl.go +++ b/sys/decl.go @@ -327,11 +327,11 @@ func (t *StructType) Align() uintptr { type UnionType struct { TypeCommon Options []Type - varlen bool + Varlen bool } func (t *UnionType) Size() uintptr { - if t.varlen { + if t.Varlen { panic("union size is not statically known") } size := t.Options[0].Size() diff --git a/sysgen/sysgen.go b/sysgen/sysgen.go index 583be5a40..ecc237118 100644 --- a/sysgen/sysgen.go +++ b/sysgen/sysgen.go @@ -275,7 +275,7 @@ func generateStructEntry(str Struct, key structKey, out io.Writer) { } varlen := "" if str.Varlen { - varlen = ", varlen: true" + varlen = ", Varlen: true" } align := "" if str.Align != 0 { -- cgit mrf-deployment