diff options
| author | Russ Cox <rsc@golang.org> | 2017-12-01 11:42:48 -0500 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2017-12-04 05:14:54 +0000 |
| commit | f047422a181d245c25127eb8e6d44502df36d376 (patch) | |
| tree | 406fa868dd729e138272bc292fefd1d72e12a362 | |
| parent | 66fcf45477b5f2ee4c39214911f417480cc55f5f (diff) | |
| download | go-f047422a181d245c25127eb8e6d44502df36d376.tar.xz | |
cmd/go: fix -covermode=atomic use of sync/atomic in -coverpkg matches
If we're using -covermode=atomic with -coverpkg, to add coverage
to more than just the package being tested, then we need to make sure
to make sync/atomic available to the compiler for every package
being recompiled for coverage.
Fixes #22728.
Change-Id: I27f88f6a62e37d4a7455554cd03c8ca2b21f81a4
Reviewed-on: https://go-review.googlesource.com/81497
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
| -rw-r--r-- | src/cmd/go/go_test.go | 8 | ||||
| -rw-r--r-- | src/cmd/go/internal/test/test.go | 3 | ||||
| -rw-r--r-- | src/cmd/go/testdata/src/coverdep/p.go | 6 | ||||
| -rw-r--r-- | src/cmd/go/testdata/src/coverdep/p1/p1.go | 3 | ||||
| -rw-r--r-- | src/cmd/go/testdata/src/coverdep/p_test.go | 7 |
5 files changed, 27 insertions, 0 deletions
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 5694b58f7a..555d8e3179 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -2416,6 +2416,14 @@ func TestCoverageUsesAtomicModeForRace(t *testing.T) { checkCoverage(tg, data) } +func TestCoverageSyncAtomicImport(t *testing.T) { + tg := testgo(t) + defer tg.cleanup() + tg.parallel() + tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata")) + tg.run("test", "-short", "-cover", "-covermode=atomic", "-coverpkg=coverdep/p1", "coverdep") +} + func TestCoverageImportMainLoop(t *testing.T) { tg := testgo(t) defer tg.cleanup() diff --git a/src/cmd/go/internal/test/test.go b/src/cmd/go/internal/test/test.go index 408698e416..74a34ad9c4 100644 --- a/src/cmd/go/internal/test/test.go +++ b/src/cmd/go/internal/test/test.go @@ -670,6 +670,9 @@ func runTest(cmd *base.Command, args []string) { coverFiles = append(coverFiles, p.CgoFiles...) coverFiles = append(coverFiles, p.TestGoFiles...) p.Internal.CoverVars = declareCoverVars(p.ImportPath, coverFiles...) + if testCover && testCoverMode == "atomic" { + ensureImport(p, "sync/atomic") + } } } diff --git a/src/cmd/go/testdata/src/coverdep/p.go b/src/cmd/go/testdata/src/coverdep/p.go new file mode 100644 index 0000000000..6baf6d5f0c --- /dev/null +++ b/src/cmd/go/testdata/src/coverdep/p.go @@ -0,0 +1,6 @@ +package p + +import _ "coverdep/p1" + +func F() { +} diff --git a/src/cmd/go/testdata/src/coverdep/p1/p1.go b/src/cmd/go/testdata/src/coverdep/p1/p1.go new file mode 100644 index 0000000000..8ae793d55d --- /dev/null +++ b/src/cmd/go/testdata/src/coverdep/p1/p1.go @@ -0,0 +1,3 @@ +package p1 + +import _ "errors" diff --git a/src/cmd/go/testdata/src/coverdep/p_test.go b/src/cmd/go/testdata/src/coverdep/p_test.go new file mode 100644 index 0000000000..11a14343ea --- /dev/null +++ b/src/cmd/go/testdata/src/coverdep/p_test.go @@ -0,0 +1,7 @@ +package p + +import "testing" + +func Test(t *testing.T) { + F() +} |
