Commit 166f2159 authored by Russ Cox's avatar Russ Cox

[release-branch.go1.8] cmd/go: do not install broken libraries during 'go test -i -race'

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: default avatarAustin Clements <austin@google.com>
parent 95a5b80e
...@@ -955,10 +955,6 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package ...@@ -955,10 +955,6 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
if p.Name == "main" && goarch == "arm" { if p.Name == "main" && goarch == "arm" {
importPaths = append(importPaths, "math") 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, // Runtime and its internal packages depend on runtime/internal/sys,
......
...@@ -545,6 +545,10 @@ func runTest(cmd *Command, args []string) { ...@@ -545,6 +545,10 @@ func runTest(cmd *Command, args []string) {
// Prepare build + run + print actions for all packages being tested. // Prepare build + run + print actions for all packages being tested.
for _, p := range pkgs { 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) buildTest, runTest, printTest, err := b.test(p)
if err != nil { if err != nil {
str := err.Error() str := err.Error()
...@@ -636,6 +640,23 @@ func runTest(cmd *Command, args []string) { ...@@ -636,6 +640,23 @@ func runTest(cmd *Command, args []string) {
b.do(root) 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 { func contains(x []string, s string) bool {
for _, t := range x { for _, t := range x {
if t == s { if t == s {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment