summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2022-03-10 22:56:00 -0500
committerBryan Mills <bcmills@google.com>2022-03-16 17:41:38 +0000
commitc0158b6a00eaecbd28ded0f66e65b9985f6db078 (patch)
tree303ac8b0c993a8a55929ab6c3f2bb0f0b76b1def /src
parent3efc7215cbf6c7842cba0f5ebe90f72f0b6de9e1 (diff)
downloadgo-git-c0158b6a00eaecbd28ded0f66e65b9985f6db078.tar.gz
go/internal/srcimporter: use the 'go' command from the Importer's GOROOT
We have no guarantee in general that there is any 'go' command in $PATH at all, let alone the correct one. However, we can expect that if a 'go' command is not in scope, the Importer should have a correct GOROOT setting: otherwise, it would not be able to import anything from 'std' at all. Given that information, when we run `go tool cgo` we should use GOROOT/bin/go specifically, not whatever 'go' we find in $PATH. This fixes a failure in go/types.TestStdlib that manifests as a timeout in when the 'go' command is not present in $PATH, due to repeated retries for every package that transitively depends on runtime/cgo. For #51461 Change-Id: I30cc4613f6f02a04e83c8d55657ef01888c7770f Reviewed-on: https://go-review.googlesource.com/c/go/+/391807 Trust: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/go/internal/srcimporter/srcimporter.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/go/internal/srcimporter/srcimporter.go b/src/go/internal/srcimporter/srcimporter.go
index e4225eb4d7..d7ec6691bc 100644
--- a/src/go/internal/srcimporter/srcimporter.go
+++ b/src/go/internal/srcimporter/srcimporter.go
@@ -205,7 +205,11 @@ func (p *Importer) cgo(bp *build.Package) (*ast.File, error) {
}
defer os.RemoveAll(tmpdir)
- args := []string{"go", "tool", "cgo", "-objdir", tmpdir}
+ goCmd := "go"
+ if p.ctxt.GOROOT != "" {
+ goCmd = filepath.Join(p.ctxt.GOROOT, "bin", "go")
+ }
+ args := []string{goCmd, "tool", "cgo", "-objdir", tmpdir}
if bp.Goroot {
switch bp.ImportPath {
case "runtime/cgo":