aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2017-12-01 11:42:48 -0500
committerBrad Fitzpatrick <bradfitz@golang.org>2017-12-04 05:14:54 +0000
commitf047422a181d245c25127eb8e6d44502df36d376 (patch)
tree406fa868dd729e138272bc292fefd1d72e12a362
parent66fcf45477b5f2ee4c39214911f417480cc55f5f (diff)
downloadgo-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.go8
-rw-r--r--src/cmd/go/internal/test/test.go3
-rw-r--r--src/cmd/go/testdata/src/coverdep/p.go6
-rw-r--r--src/cmd/go/testdata/src/coverdep/p1/p1.go3
-rw-r--r--src/cmd/go/testdata/src/coverdep/p_test.go7
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()
+}