From ac93d7e1d83ffac19983e9d754a47e7808f1230e Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 28 Nov 2017 14:27:28 +0100 Subject: pkg/compiler: add check that len does not refer to array with varlen elements This [almost] always means a bug in descriptions. Fix all bugs identified by the check. --- pkg/compiler/check.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'pkg/compiler/check.go') diff --git a/pkg/compiler/check.go b/pkg/compiler/check.go index 5fefeaf68..349dd9017 100644 --- a/pkg/compiler/check.go +++ b/pkg/compiler/check.go @@ -221,6 +221,21 @@ func (comp *compiler) checkLenTarget(t *ast.Type, name, target string, fields [] if fld.Type == t { comp.error(t.Pos, "%v target %v refer to itself", t.Ident, target) } + if t.Ident == "len" { + inner := fld.Type + desc, args, _ := comp.getArgsBase(inner, "", prog.DirIn, false) + for desc == typePtr { + if desc != typePtr { + break + } + inner = args[1] + desc, args, _ = comp.getArgsBase(inner, "", prog.DirIn, false) + } + if desc == typeArray && comp.isVarlen(args[0]) { + comp.error(t.Pos, "len target %v refer to an array with"+ + " variable-size elements (do you mean bytesize?)", target) + } + } return } for _, parent := range parents { -- cgit mrf-deployment