From f668573a5e708db399688c9441cf5ec2eb2f29b0 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 9 Sep 2019 19:54:41 -0700 Subject: [PATCH] cmd/go: for gccgo, look for tool build ID before hashing entire file Also fix the key used to store the ID. This is a significant speedup in cmd/go run time when using an unreleased toolchain. For example, the TestGoBuildTestOnly cmd/go test goes from 15 seconds to 1 second. Change-Id: Ibfd697d55084db059c6b563f70f71f635e935391 Reviewed-on: https://go-review.googlesource.com/c/go/+/194441 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Jay Conrod --- src/cmd/go/internal/work/buildid.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/cmd/go/internal/work/buildid.go b/src/cmd/go/internal/work/buildid.go index bf485d75ad..27bde8c615 100644 --- a/src/cmd/go/internal/work/buildid.go +++ b/src/cmd/go/internal/work/buildid.go @@ -292,14 +292,19 @@ func (b *Builder) gccgoToolID(name, language string) (string, error) { exe = lp } } - if _, err := os.Stat(exe); err != nil { - return "", fmt.Errorf("%s: can not find compiler %q: %v; output %q", name, exe, err, out) + id, err = buildid.ReadFile(exe) + if err != nil { + return "", err + } + + // If we can't find a build ID, use a hash. + if id == "" { + id = b.fileHash(exe) } - id = b.fileHash(exe) } b.id.Lock() - b.toolIDCache[name] = id + b.toolIDCache[key] = id b.id.Unlock() return id, nil