diff options
author | Cherry Mui <cherryyz@google.com> | 2023-03-02 19:16:34 -0500 |
---|---|---|
committer | Cherry Mui <cherryyz@google.com> | 2023-03-06 19:27:53 +0000 |
commit | 34d6aaae29023b9edfef2d3360d89e48c8dd118f (patch) | |
tree | 3fe4c4b2788cc2641d75976b162d5e263d39740e /src/cmd/go/internal/load/pkg.go | |
parent | 74502e9bb4d732239fa684969ddb22e7b7345f3a (diff) | |
download | go-34d6aaae29023b9edfef2d3360d89e48c8dd118f.tar.gz go-34d6aaae29023b9edfef2d3360d89e48c8dd118f.zip |
cmd/go: distinguish packages built for different main packages in printing
In -pgo=auto mode, a package may be built multiple times. E.g. for
go build -pgo=auto cmd/a cmd/b
and both cmd/a and cmd/b imports package p, p may be built twice,
one using a's profile, one using b's. If we need to print p, e.g.
in "go list -deps" or when there is a build failure, p will be
printed twice, and currently we don't distinguish them.
We have a precedence for a similar case: for testing, there is the
original package, and the (internal) test version of the package
(which includes _test.go files). Packages that import the package
under testing may also have two versions (one imports the original,
one imports the testing version). In printing, the go command
distinguishes them by adding a "[p.test]" suffix for the latter,
as they are specifically built for the p.test binary.
We do the similar. When a package needs to be compiled multiple
times for different main packages, we attach the main package's
import path, like "p [cmd/a]" for package p built specifically
for cmd/a.
For #58099.
Change-Id: I4a040cf17e1dceb5ca1810c217f16e734c858ab6
Reviewed-on: https://go-review.googlesource.com/c/go/+/473275
Reviewed-by: Michael Pratt <mpratt@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Diffstat (limited to 'src/cmd/go/internal/load/pkg.go')
-rw-r--r-- | src/cmd/go/internal/load/pkg.go | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go index 6284955228..40278dda4d 100644 --- a/src/cmd/go/internal/load/pkg.go +++ b/src/cmd/go/internal/load/pkg.go @@ -195,6 +195,9 @@ func (p *Package) Desc() string { if p.ForTest != "" { return p.ImportPath + " [" + p.ForTest + ".test]" } + if p.Internal.ForMain != "" { + return p.ImportPath + " [" + p.Internal.ForMain + "]" + } return p.ImportPath } @@ -234,6 +237,7 @@ type PackageInternal struct { Embed map[string][]string // //go:embed comment mapping OrigImportPath string // original import path before adding '_test' suffix PGOProfile string // path to PGO profile + ForMain string // the main package if this package is built specifically for it Asmflags []string // -asmflags for this package Gcflags []string // -gcflags for this package @@ -2944,6 +2948,7 @@ func setPGOProfilePath(pkgs []*Package) { p1.Internal.Imports = slices.Clone(p.Internal.Imports) copied[p] = p1 p = p1 + p.Internal.ForMain = pmain.ImportPath } p.Internal.PGOProfile = file // Recurse to dependencies. |