Commit c39cd41e authored by Bryan C. Mills's avatar Bryan C. Mills

cmd/go: restore default vet analyzers for targets in GOROOT

This fixes a regression introduced in CL 209498,
found while investigating #32471.

Also fix $WORK replacement in cmd/go/internal/work.(*Builder).Showcmd
when b.WorkDir includes a backslash and appears in a quoted string.
That fix is needed in order to write a precise test that passes under Windows,
since Windows directories nearly always include backslashes.

Updates #35837

Change-Id: I5fddc5435d5d283a3e598989209d873b59b0a39c
Reviewed-on: https://go-review.googlesource.com/c/go/+/210937
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: default avatarJay Conrod <jayconrod@google.com>
parent a15b5d30
...@@ -51,6 +51,7 @@ func runVet(cmd *base.Command, args []string) { ...@@ -51,6 +51,7 @@ func runVet(cmd *base.Command, args []string) {
work.BuildInit() work.BuildInit()
work.VetFlags = vetFlags work.VetFlags = vetFlags
work.VetExplicit = true
if vetTool != "" { if vetTool != "" {
var err error var err error
work.VetTool, err = filepath.Abs(vetTool) work.VetTool, err = filepath.Abs(vetTool)
......
...@@ -1036,7 +1036,7 @@ func (b *Builder) vet(a *Action) error { ...@@ -1036,7 +1036,7 @@ func (b *Builder) vet(a *Action) error {
// There's too much unsafe.Pointer code // There's too much unsafe.Pointer code
// that vet doesn't like in low-level packages // that vet doesn't like in low-level packages
// like runtime, sync, and reflect. // like runtime, sync, and reflect.
vetFlags = append(vetFlags, string("-unsafeptr=false")) vetFlags = []string{"-unsafeptr=false"}
} }
// Note: We could decide that vet should compute export data for // Note: We could decide that vet should compute export data for
...@@ -1774,6 +1774,11 @@ func (b *Builder) fmtcmd(dir string, format string, args ...interface{}) string ...@@ -1774,6 +1774,11 @@ func (b *Builder) fmtcmd(dir string, format string, args ...interface{}) string
} }
if b.WorkDir != "" { if b.WorkDir != "" {
cmd = strings.ReplaceAll(cmd, b.WorkDir, "$WORK") cmd = strings.ReplaceAll(cmd, b.WorkDir, "$WORK")
escaped := strconv.Quote(b.WorkDir)
escaped = escaped[1 : len(escaped)-1] // strip quote characters
if escaped != b.WorkDir {
cmd = strings.ReplaceAll(cmd, escaped, "$WORK")
}
} }
return cmd return cmd
} }
......
env GO111MODULE=off env GO111MODULE=on
# Issue 35837. Verify that "go vet -<analyzer> <std package>" works if 'pwd' is not $GOROOT/src # Regression test for issue 35837: "go vet -<analyzer> <std package>"
# we utilize the package runtime/testdata/testprog as the issue is specific to vetting standard package # did not apply the requested analyzer.
go vet -n -unreachable=false encoding/binary
go vet -n -unreachable=false runtime/testdata/testprog
stderr '-unreachable=false' stderr '-unreachable=false'
stderr '-unsafeptr=false' ! stderr '-unsafeptr=false'
[short] stop
env GOCACHE=$WORK/gocache
env GOTMPDIR=$WORK/tmp
go env GOTMPDIR
stdout '/tmp'
# "go test" on a user package should by default enable an explicit whitelist of analyzers.
go test -x -run=none .
stderr '[/\\]vet'$GOEXE'["]? .* -errorsas .* ["]?\$WORK[/\\][^ ]*[/\\]vet\.cfg'
# "go test" on a standard package should by default disable an explicit blacklist.
go test -x -run=none encoding/binary
stderr '[/\\]vet'$GOEXE'["]? -unsafeptr=false ["]?\$WORK[/\\][^ ]*[/\\]vet\.cfg'
# Both should allow users to override via the -vet flag.
go test -x -vet=unreachable -run=none .
stderr '[/\\]vet'$GOEXE'["]? -unreachable ["]?\$WORK[/\\][^ ]*[/\\]vet\.cfg'
go test -x -vet=unreachable -run=none encoding/binary
stderr '[/\\]vet'$GOEXE'["]? -unreachable ["]?\$WORK[/\\][^ ]*[/\\]vet\.cfg'
-- go.mod --
module example.com/x
-- x.go --
package x
-- x_test.go --
package x
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment