cmd/go: fix build config before creating actions for 'go list -cover'

When -covermode is set to atomic, instrumented packages need to import
sync/atomic. If this is not already imported by a package being
instrumented, the build needs to ensure that sync/atomic is compiled
whenever 'go list' is run in a way that triggers package builds.

The build config was already being made to ensure the import, but only
after the action graph had been created, so there was no guarantee that
sync/atomic would be built when needed.

Fixes #65264.

Change-Id: Ib3f1e102ce2ef554ea08330d9db69a8c98790ac5
Reviewed-on: https://go-review.googlesource.com/c/go/+/560236
Run-TryBot: Bryan Mills <bcmills@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
This commit is contained in:
Ehden Sinai 2024-02-01 13:38:56 -05:00 committed by Gopher Robot
parent c9d88ea2aa
commit ac08c05d4d
2 changed files with 7 additions and 3 deletions

View File

@ -725,6 +725,9 @@ func runList(ctx context.Context, cmd *base.Command, args []string) {
b.IsCmdList = true b.IsCmdList = true
b.NeedExport = *listExport b.NeedExport = *listExport
b.NeedCompiledGoFiles = *listCompiled b.NeedCompiledGoFiles = *listCompiled
if cfg.Experiment.CoverageRedesign && cfg.BuildCover {
load.PrepareForCoverageBuild(pkgs)
}
a := &work.Action{} a := &work.Action{}
// TODO: Use pkgsFilter? // TODO: Use pkgsFilter?
for _, p := range pkgs { for _, p := range pkgs {
@ -732,9 +735,6 @@ func runList(ctx context.Context, cmd *base.Command, args []string) {
a.Deps = append(a.Deps, b.AutoAction(work.ModeInstall, work.ModeInstall, p)) a.Deps = append(a.Deps, b.AutoAction(work.ModeInstall, work.ModeInstall, p))
} }
} }
if cfg.Experiment.CoverageRedesign && cfg.BuildCover {
load.PrepareForCoverageBuild(pkgs)
}
b.Do(ctx, a) b.Do(ctx, a)
} }

View File

@ -38,6 +38,10 @@ cp stdout $WORK/toolbuildid.txt
# Build IDs should match here. # Build IDs should match here.
cmp $WORK/toolbuildid.txt $WORK/listbuildid.txt cmp $WORK/toolbuildid.txt $WORK/listbuildid.txt
# Make sure that the build succeeds regardless of covermode.
go list -export -covermode=atomic m/example
go list -export -covermode=count m/example
-- go.mod -- -- go.mod --
module m module m