]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.8] cmd/go: do not install broken libraries during 'go test -i...
authorRuss Cox <rsc@golang.org>
Wed, 5 Apr 2017 19:01:21 +0000 (15:01 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 5 Apr 2017 20:34:00 +0000 (20:34 +0000)
Manual port of CL 37598 (submitted for Go 1.9) to Go 1.8.1.

Fixes #19133.
Fixes #19151.

Change-Id: I51707ea35068a393022f554b391ee2638dba16b5
Reviewed-on: https://go-review.googlesource.com/39617
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/go/pkg.go
src/cmd/go/test.go

index e40f9420c7e2217f9e126cf5f636c282c532d959..575f187f3bd7609d97233c3cb45ccaa90ff75810 100644 (file)
@@ -955,10 +955,6 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
                if p.Name == "main" && goarch == "arm" {
                        importPaths = append(importPaths, "math")
                }
-               // In coverage atomic mode everything depends on sync/atomic.
-               if testCoverMode == "atomic" && (!p.Standard || (p.ImportPath != "runtime/cgo" && p.ImportPath != "runtime/race" && p.ImportPath != "sync/atomic")) {
-                       importPaths = append(importPaths, "sync/atomic")
-               }
        }
 
        // Runtime and its internal packages depend on runtime/internal/sys,
index 6482f0fd32301a83a0bb9174170705b204587ef7..35250c9f6b379428fad9f19ff9b471fceabfb4c9 100644 (file)
@@ -545,6 +545,10 @@ func runTest(cmd *Command, args []string) {
 
        // Prepare build + run + print actions for all packages being tested.
        for _, p := range pkgs {
+               // sync/atomic import is inserted by the cover tool. See #18486
+               if testCover && testCoverMode == "atomic" {
+                       ensureImport(p, "sync/atomic")
+               }
                buildTest, runTest, printTest, err := b.test(p)
                if err != nil {
                        str := err.Error()
@@ -636,6 +640,23 @@ func runTest(cmd *Command, args []string) {
        b.do(root)
 }
 
+// ensures that package p imports the named package.
+func ensureImport(p *Package, pkg string) {
+       for _, d := range p.deps {
+               if d.Name == pkg {
+                       return
+               }
+       }
+
+       a := loadPackage(pkg, &importStack{})
+       if a.Error != nil {
+               fatalf("load %s: %v", pkg, a.Error)
+       }
+       computeStale(a)
+
+       p.imports = append(p.imports, a)
+}
+
 func contains(x []string, s string) bool {
        for _, t := range x {
                if t == s {