Commit e6756ec1 authored by Ian Lance Taylor's avatar Ian Lance Taylor

cmd/go: ignore coverpkg match on sync/atomic in atomic coverage mode

Otherwise we get into a dependency loop as we try to apply coverage
analysis to sync/atomic when the coverage analysis itself requires
sync/atomic.

Fixes #23694

Change-Id: I3a74ef3881ec5c6197ed348acc7f9e175417f6c7
Reviewed-on: https://go-review.googlesource.com/91875
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
parent 10d096fe
...@@ -5686,3 +5686,16 @@ func TestCpuprofileTwice(t *testing.T) { ...@@ -5686,3 +5686,16 @@ func TestCpuprofileTwice(t *testing.T) {
tg.run("test", "-o="+bin, "-cpuprofile="+out, "x") tg.run("test", "-o="+bin, "-cpuprofile="+out, "x")
tg.mustExist(out) tg.mustExist(out)
} }
// Issue 23694.
func TestAtomicCoverpkgAll(t *testing.T) {
tg := testgo(t)
defer tg.cleanup()
tg.parallel()
tg.tempFile("src/x/x.go", `package x; import _ "sync/atomic"; func F() {}`)
tg.tempFile("src/x/x_test.go", `package x; import "testing"; func TestF(t *testing.T) { F() }`)
tg.setenv("GOPATH", tg.path("."))
tg.run("test", "-coverpkg=all", "-race", "x")
tg.run("test", "-coverpkg=all", "-covermode=atomic", "x")
}
...@@ -659,6 +659,15 @@ func runTest(cmd *base.Command, args []string) { ...@@ -659,6 +659,15 @@ func runTest(cmd *base.Command, args []string) {
haveMatch = true haveMatch = true
} }
} }
// Silently ignore attempts to run coverage on
// sync/atomic when using atomic coverage mode.
// Atomic coverage mode uses sync/atomic, so
// we can't also do coverage on it.
if testCoverMode == "atomic" && p.Standard && p.ImportPath == "sync/atomic" {
continue
}
if haveMatch { if haveMatch {
testCoverPkgs = append(testCoverPkgs, p) testCoverPkgs = append(testCoverPkgs, p)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment