From c7a00958ec4b051c2ceca641429068cd5242f6b9 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 23 Feb 2015 10:57:19 -0500 Subject: cmd/vet: fix unnamed FP check While we're here, silence a print about failure to import fmt. When it prints, it looks like a problem, and in fact the result is never used in vet. Change-Id: I76121b335026a2b09637608b997517be94fd167c Reviewed-on: https://go-review.googlesource.com/5573 Reviewed-by: Rob Pike --- cmd/vet/asmdecl.go | 13 +++++++++++-- cmd/vet/types.go | 4 +++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cmd/vet/asmdecl.go b/cmd/vet/asmdecl.go index e1ea9a2..63095aa 100644 --- a/cmd/vet/asmdecl.go +++ b/cmd/vet/asmdecl.go @@ -81,7 +81,7 @@ var ( asmTEXT = re(`\bTEXT\b.*ยท([^\(]+)\(SB\)(?:\s*,\s*([0-9A-Z|+]+))?(?:\s*,\s*\$(-?[0-9]+)(?:-([0-9]+))?)?`) asmDATA = re(`\b(DATA|GLOBL)\b`) asmNamedFP = re(`([a-zA-Z0-9_\xFF-\x{10FFFF}]+)(?:\+([0-9]+))\(FP\)`) - asmUnnamedFP = re(`[^+\-0-9]](([0-9]+)\(FP\))`) + asmUnnamedFP = re(`[^+\-0-9](([0-9]+)\(FP\))`) asmSP = re(`[^+\-0-9](([0-9]+)\(([A-Z0-9]+)\))`) asmOpcode = re(`^\s*(?:[A-Z0-9a-z_]+:)?\s*([A-Z]+)\s*([^,]*)(?:,\s*(.*))?`) power64Suff = re(`([BHWD])(ZU|Z|U|BR)?$`) @@ -191,6 +191,9 @@ Files: localSize += archDef.intSize } argSize, _ = strconv.Atoi(m[4]) + if fn == nil && !strings.Contains(fnName, "<>") { + badf("function %s missing Go declaration", fnName) + } wroteSP = false haveRetArg = false continue @@ -252,7 +255,13 @@ Files: } for _, m := range asmUnnamedFP.FindAllStringSubmatch(line, -1) { - badf("use of unnamed argument %s", m[1]) + off, _ := strconv.Atoi(m[2]) + v := fn.varByOffset[off] + if v != nil { + badf("use of unnamed argument %s; offset %d is %s+%d(FP)", m[1], off, v.name, v.off) + } else { + badf("use of unnamed argument %s", m[1]) + } } for _, m := range asmNamedFP.FindAllStringSubmatch(line, -1) { diff --git a/cmd/vet/types.go b/cmd/vet/types.go index 0a2a248..8a0182b 100644 --- a/cmd/vet/types.go +++ b/cmd/vet/types.go @@ -37,7 +37,9 @@ func init() { func importType(path, name string) types.Type { pkg, err := types.DefaultImport(imports, path) if err != nil { - warnf("import failed: %v", err) + // This can happen if fmt hasn't been compiled yet. + // Since nothing uses formatterType anyway, don't complain. + //warnf("import failed: %v", err) return nil } if obj, ok := pkg.Scope().Lookup(name).(*types.TypeName); ok { -- cgit v1.2.3