From 4f7cb802ba5deae2bd4738c740f36760f11823ad Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Wed, 14 Nov 2018 10:25:09 -0500 Subject: [PATCH] go/analysis/passes/asmdecl: turn two diagnostics into log messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vet issues a warning (non-error diagnostic) when, for example, it cannot check an assembly file because the Go and asm symbols are in different packages. The new analysis API has no concept of warnings: any diagnostic always causes a non-zero exit. This change turns the asmdecl diagnostics back into warnings using log.Print, which is not ideal, but is necessary to pacify cmd/vet/all and its whitelist during the transition. Better solutions would be for the new analysis API to have a concept of warning, or for asmdecl to be silent and cmd/vet/all's whitelist not to expect these messages. Also, fix a bug in the "cross-check" predicate: cmd/vet confuses the name of a package and its path. The a∕b∕c names (using Unicode division slash) that appear in assembly correspond directly to the path. The only effective test of this change will be cmd/vet/all itself. Change-Id: I2e402d48717df723e2efdc2379636ec9b204031d Reviewed-on: https://go-review.googlesource.com/c/149598 Reviewed-by: Daniel Martí Reviewed-by: Michael Matloob --- go/analysis/passes/asmdecl/asmdecl.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/go/analysis/passes/asmdecl/asmdecl.go b/go/analysis/passes/asmdecl/asmdecl.go index 11dfbf6b..0f8abb57 100644 --- a/go/analysis/passes/asmdecl/asmdecl.go +++ b/go/analysis/passes/asmdecl/asmdecl.go @@ -243,16 +243,17 @@ Files: } } if arch == "" { - badf("%s: cannot determine architecture for assembly file") + log.Printf("%s: cannot determine architecture for assembly file", fname) continue Files } } fnName = m[2] - if pkgName := strings.TrimSpace(m[1]); pkgName != "" { - pathParts := strings.Split(pkgName, "∕") - pkgName = pathParts[len(pathParts)-1] - if pkgName != pass.Pkg.Path() { - badf("[%s] cannot check cross-package assembly function: %s is in package %s", arch, fnName, pkgName) + if pkgPath := strings.TrimSpace(m[1]); pkgPath != "" { + // The assembler uses Unicode division slash within + // identifiers to represent the directory separator. + pkgPath = strings.Replace(pkgPath, "∕", "/", -1) + if pkgPath != pass.Pkg.Path() { + log.Printf("%s:%d: [%s] cannot check cross-package assembly function: %s is in package %s", fname, lineno, arch, fnName, pkgPath) fn = nil fnName = "" continue