From ac08c05d4daa11957fcada6db33f2150936bac27 Mon Sep 17 00:00:00 2001 From: Ehden Sinai Date: Thu, 1 Feb 2024 13:38:56 -0500 Subject: [PATCH] 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 Auto-Submit: Bryan Mills TryBot-Result: Gopher Robot Reviewed-by: Bryan Mills Reviewed-by: Michael Matloob --- src/cmd/go/internal/list/list.go | 6 +++--- src/cmd/go/testdata/script/cover_list.txt | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cmd/go/internal/list/list.go b/src/cmd/go/internal/list/list.go index db587148826281..66fb5aa31cb714 100644 --- a/src/cmd/go/internal/list/list.go +++ b/src/cmd/go/internal/list/list.go @@ -725,6 +725,9 @@ func runList(ctx context.Context, cmd *base.Command, args []string) { b.IsCmdList = true b.NeedExport = *listExport b.NeedCompiledGoFiles = *listCompiled + if cfg.Experiment.CoverageRedesign && cfg.BuildCover { + load.PrepareForCoverageBuild(pkgs) + } a := &work.Action{} // TODO: Use pkgsFilter? 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)) } } - if cfg.Experiment.CoverageRedesign && cfg.BuildCover { - load.PrepareForCoverageBuild(pkgs) - } b.Do(ctx, a) } diff --git a/src/cmd/go/testdata/script/cover_list.txt b/src/cmd/go/testdata/script/cover_list.txt index 6b8aaf45d1e123..1b1f3266622155 100644 --- a/src/cmd/go/testdata/script/cover_list.txt +++ b/src/cmd/go/testdata/script/cover_list.txt @@ -38,6 +38,10 @@ cp stdout $WORK/toolbuildid.txt # Build IDs should match here. 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 -- module m