]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: fix -covermode=atomic use of sync/atomic in -coverpkg matches
authorRuss Cox <rsc@golang.org>
Fri, 1 Dec 2017 16:42:48 +0000 (11:42 -0500)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 4 Dec 2017 05:14:54 +0000 (05:14 +0000)
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>

src/cmd/go/go_test.go
src/cmd/go/internal/test/test.go
src/cmd/go/testdata/src/coverdep/p.go [new file with mode: 0644]
src/cmd/go/testdata/src/coverdep/p1/p1.go [new file with mode: 0644]
src/cmd/go/testdata/src/coverdep/p_test.go [new file with mode: 0644]

index 5694b58f7a3d59f7756ad9bddc867051b15c0391..555d8e31793e138c1783b03aa2a7d37506b1c538 100644 (file)
@@ -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()
index 408698e416210a57c5aefa90cc565f70697b0596..74a34ad9c4913e046c47cd778991cbdbdda56a27 100644 (file)
@@ -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 (file)
index 0000000..6baf6d5
--- /dev/null
@@ -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 (file)
index 0000000..8ae793d
--- /dev/null
@@ -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 (file)
index 0000000..11a1434
--- /dev/null
@@ -0,0 +1,7 @@
+package p
+
+import "testing"
+
+func Test(t *testing.T) {
+       F()
+}