aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/load/pkg.go
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2023-03-02 19:16:34 -0500
committerCherry Mui <cherryyz@google.com>2023-03-06 19:27:53 +0000
commit34d6aaae29023b9edfef2d3360d89e48c8dd118f (patch)
tree3fe4c4b2788cc2641d75976b162d5e263d39740e /src/cmd/go/internal/load/pkg.go
parent74502e9bb4d732239fa684969ddb22e7b7345f3a (diff)
downloadgo-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.go5
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.