diff options
Diffstat (limited to 'src/cmd/go/test.go')
-rw-r--r-- | src/cmd/go/test.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/cmd/go/test.go b/src/cmd/go/test.go index 6482f0fd32..35250c9f6b 100644 --- a/src/cmd/go/test.go +++ b/src/cmd/go/test.go @@ -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 { |