]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.10] cmd/go: if -race, don't run coverage on runtime packages
authorIan Lance Taylor <iant@golang.org>
Sat, 17 Feb 2018 03:08:59 +0000 (19:08 -0800)
committerAndrew Bonventre <andybons@golang.org>
Thu, 29 Mar 2018 06:08:56 +0000 (06:08 +0000)
Don't compile the runtime packages with coverage when using the race
detector. The user can, perhaps accidentally, request coverage for the
runtime by using -coverpkg=all. If using the race detector, the
runtime package coverage will call into the race detector before it
has been initialized. This will cause the program to crash
mysteriously on startup.

Fixes #23882

Change-Id: I9a63867a9138797d8b8afb0856ae21079accdb27
Reviewed-on: https://go-review.googlesource.com/94898
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Andrew Bonventre <andybons@golang.org>
Reviewed-on: https://go-review.googlesource.com/103095
Run-TryBot: Andrew Bonventre <andybons@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/go/go_test.go
src/cmd/go/internal/test/test.go

index 63974ea0cf2ce7a67e369a3b5081f90e70ba6c43..a985f2afefaa47657712663a77d9b9343b59e03e 100644 (file)
@@ -5750,6 +5750,21 @@ func TestAtomicCoverpkgAll(t *testing.T) {
        }
 }
 
+// Issue 23882.
+func TestCoverpkgAllRuntime(t *testing.T) {
+       tg := testgo(t)
+       defer tg.cleanup()
+       tg.parallel()
+
+       tg.tempFile("src/x/x.go", `package x; import _ "runtime"; 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", "x")
+       if canRace {
+               tg.run("test", "-coverpkg=all", "-race", "x")
+       }
+}
+
 func TestBadCommandLines(t *testing.T) {
        tg := testgo(t)
        defer tg.cleanup()
index a99c6a5ec220200b8398f4ae76b38501c573d6e1..67bc67c2395344e56f1f474705b0e78b5282b1a0 100644 (file)
@@ -668,6 +668,14 @@ func runTest(cmd *base.Command, args []string) {
                                continue
                        }
 
+                       // If using the race detector, silently ignore
+                       // attempts to run coverage on the runtime
+                       // packages. It will cause the race detector
+                       // to be invoked before it has been initialized.
+                       if cfg.BuildRace && p.Standard && (p.ImportPath == "runtime" || strings.HasPrefix(p.ImportPath, "runtime/internal")) {
+                               continue
+                       }
+
                        if haveMatch {
                                testCoverPkgs = append(testCoverPkgs, p)
                        }