From 5f5cae7200b544bfc250ad0676a98db1f7e7df31 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Tue, 12 Jul 2022 10:48:47 -0400 Subject: [PATCH] cmd/go: avoid indexing GOROOT packages when the compiler is 'gccgo' The gccgo compiler does not load standard-library packages from GOROOT/src, so we cannot load those packages from the GOROOT/src index when using that compiler. This fixes TestScript/gccgo_link_c (and perhaps other gccgo tests) when a 'gccgo' executable is present. Unfortunately, only a few builders caught the broken test because 'gccgo' is not installed on most Go project builders (see #35786). For #53577. Fixes #53815. Change-Id: I11a5cf6dbf4ac9893c4d02bd6ab7ef60f67b1e87 Reviewed-on: https://go-review.googlesource.com/c/go/+/417094 TryBot-Result: Gopher Robot Run-TryBot: Bryan Mills Reviewed-by: Russ Cox --- src/cmd/go/internal/modindex/read.go | 3 +++ src/go/build/build.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/cmd/go/internal/modindex/read.go b/src/cmd/go/internal/modindex/read.go index 38ddfec70f..707f17e1ab 100644 --- a/src/cmd/go/internal/modindex/read.go +++ b/src/cmd/go/internal/modindex/read.go @@ -139,6 +139,9 @@ func GetPackage(modroot, pkgdir string) (*IndexPackage, error) { if !errors.Is(err, errNotFromModuleCache) { return nil, err } + if cfg.BuildContext.Compiler == "gccgo" && str.HasPathPrefix(modroot, cfg.GOROOTsrc) { + return nil, err // gccgo has no sources for GOROOT packages. + } return openIndexPackage(modroot, pkgdir) } diff --git a/src/go/build/build.go b/src/go/build/build.go index bfe3f444ca..dfb37b8f34 100644 --- a/src/go/build/build.go +++ b/src/go/build/build.go @@ -715,6 +715,9 @@ func (ctxt *Context) Import(path string, srcDir string, mode ImportMode) (*Packa tried.goroot = dir } if ctxt.Compiler == "gccgo" && goroot.IsStandardPackage(ctxt.GOROOT, ctxt.Compiler, path) { + // TODO(bcmills): Setting p.Dir here is misleading, because gccgo + // doesn't actually load its standard-library packages from this + // directory. See if we can leave it unset. p.Dir = ctxt.joinPath(ctxt.GOROOT, "src", path) p.Goroot = true p.Root = ctxt.GOROOT