go/analysis/passes/asmdecl: turn two diagnostics into log messages
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í <mvdan@mvdan.cc> Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
parent
99072bc9d7
commit
4f7cb802ba
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue