]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: pass GoVersion in vet config
authorRuss Cox <rsc@golang.org>
Wed, 5 Jul 2023 16:12:35 +0000 (12:12 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 6 Jul 2023 13:09:30 +0000 (13:09 +0000)
When invoking a vet tool with -vettool (or vet itself),
we need to pass the package's GoVersion to use when
analyzing the package.

The test of this behavior is in the x/tools/go/analysis CL 507880.

For #61176.

Change-Id: I3b5a90fcd19a0adc7fb29366e106e18f722fc061
Reviewed-on: https://go-review.googlesource.com/c/go/+/507976
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Russ Cox <rsc@golang.org>

src/cmd/go/internal/work/exec.go
src/cmd/go/internal/work/gc.go

index d38a051b2bb016aa1359262b0e9aaf0f4a9da08a..13d2a78a97d4d7d460d5d978a24c2cb5580fe567 100644 (file)
@@ -1115,6 +1115,7 @@ type vetConfig struct {
        PackageVetx map[string]string // map package path to vetx data from earlier vet run
        VetxOnly    bool              // only compute vetx data; don't report detected problems
        VetxOutput  string            // write vetx data to this output file
+       GoVersion   string            // Go version for package
 
        SucceedOnTypecheckFailure bool // awful hack; see #18395 and below
 }
@@ -1149,6 +1150,13 @@ func buildVetConfig(a *Action, srcfiles []string) {
                PackageFile:  make(map[string]string),
                Standard:     make(map[string]bool),
        }
+       if a.Package.Module != nil {
+               v := a.Package.Module.GoVersion
+               if v == "" {
+                       v = gover.DefaultGoModVersion
+               }
+               vcfg.GoVersion = "go" + v
+       }
        a.vetCfg = vcfg
        for i, raw := range a.Package.Internal.RawImports {
                final := a.Package.Imports[i]
index 6043ad5353e404ccf19e51ed40011dea1207d333..26b4e0f490df3fa3df5c54bd05724b4080b5e9d4 100644 (file)
@@ -85,19 +85,7 @@ func (gcToolchain) gc(b *Builder, a *Action, archive string, importcfg, embedcfg
        if p.Module != nil {
                v := p.Module.GoVersion
                if v == "" {
-                       // We started adding a 'go' directive to the go.mod file unconditionally
-                       // as of Go 1.12, so any module that still lacks such a directive must
-                       // either have been authored before then, or have a hand-edited go.mod
-                       // file that hasn't been updated by cmd/go since that edit.
-                       //
-                       // Unfortunately, through at least Go 1.16 we didn't add versions to
-                       // vendor/modules.txt. So this could also be a vendored 1.16 dependency.
-                       //
-                       // Fortunately, there were no breaking changes to the language between Go
-                       // 1.11 and 1.16, so if we assume Go 1.16 semantics we will not introduce
-                       // any spurious errors — we will only mask errors, and not particularly
-                       // important ones at that.
-                       v = "1.16"
+                       v = gover.DefaultGoModVersion
                }
                if allowedVersion(v) {
                        defaultGcFlags = append(defaultGcFlags, "-lang=go"+gover.Lang(v))