aboutsummaryrefslogtreecommitdiffstats
path: root/prog/size.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-01-24 11:35:22 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-01-24 11:35:22 +0100
commitca9c302d807f47a55552d0a20a2dfcdb0fcc6e28 (patch)
tree2eb665c4c58d338671dedf8c70d617eebab2e202 /prog/size.go
parente5b101ddff108ef913e8f7c6085eac52498443a0 (diff)
pkg/compiler, prog: fix template parent lens
It's possible that a struct can have 2+ parents, which is the same template (differs only by arguments). See the new test case. Support such case.
Diffstat (limited to 'prog/size.go')
-rw-r--r--prog/size.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/prog/size.go b/prog/size.go
index 36928a8bc..e2451fe15 100644
--- a/prog/size.go
+++ b/prog/size.go
@@ -5,6 +5,7 @@ package prog
import (
"fmt"
+ "strings"
)
func (target *Target) generateSize(arg Arg, lenType *LenType) uint64 {
@@ -67,7 +68,12 @@ func (target *Target) assignSizes(args []Arg, parentsMap map[Arg]Arg) {
sizeAssigned := false
for parent := parentsMap[arg]; parent != nil; parent = parentsMap[parent] {
- if typ.Buf == parent.Type().Name() {
+ parentName := parent.Type().Name()
+ if pos := strings.IndexByte(parentName, '['); pos != -1 {
+ // For template parents, strip arguments.
+ parentName = parentName[:pos]
+ }
+ if typ.Buf == parentName {
a.Val = parent.Size()
if typ.BitSize != 0 {
a.Val = a.Val * 8 / typ.BitSize