1
0
mirror of https://github.com/golang/go synced 2024-11-26 21:21:34 -07:00

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: Russ Cox <rsc@golang.org>
This commit is contained in:
Ian Lance Taylor 2018-02-04 18:45:39 -08:00
parent 10d096fec2
commit e6756ec149
2 changed files with 22 additions and 0 deletions

View File

@ -5686,3 +5686,16 @@ func TestCpuprofileTwice(t *testing.T) {
tg.run("test", "-o="+bin, "-cpuprofile="+out, "x")
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")
}

View File

@ -659,6 +659,15 @@ func runTest(cmd *base.Command, args []string) {
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 {
testCoverPkgs = append(testCoverPkgs, p)
}