From 38d841a18ab0bcb63554fed6b38012e504599891 Mon Sep 17 00:00:00 2001 From: Christian Stewart Date: Wed, 1 Jun 2022 20:52:12 +0000 Subject: [PATCH] cmd/dist: use gohostarch for ssa rewrite check Fix a build failure when bootstrapping the Go compiler with go-bootstrap 1.4 while the environment contains GOARCH=riscv64. Building Go toolchain1 using go-1.4-bootstrap-20171003. src/cmd/compile/internal/ssa/rewriteRISCV64.go:4814 invalid operation: y << x (shift count type int64, must be unsigned integer) This is because: - buildtool.go:198: calls bootstrapRewriteFile(src) - bootstrapRewriteFile: buildtool.go:283 calls: - isUnneededSSARewriteFile: checks os.Getenv("GOARCH") - isUnneededSSARewriteFile: returns "", false - bootstrapRewriteFile: calls bootstrapFixImports - boostrapFixImports: generates code go1.4 cannot compile Instead of checking "GOARCH" in the environment, use the gohostarch variable. Change-Id: Ie9c190498555c4068461fead6278a62e924062c6 GitHub-Last-Rev: 300d7a7fea0a67c696970fd271e2ce709674a658 GitHub-Pull-Request: golang/go#52362 Reviewed-on: https://go-review.googlesource.com/c/go/+/400376 Reviewed-by: Bryan Mills TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov Auto-Submit: Bryan Mills Run-TryBot: Bryan Mills Reviewed-by: Joel Sing Run-TryBot: Joel Sing --- src/cmd/dist/buildtool.go | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go index 036f8c52fa..2d8ace52d8 100644 --- a/src/cmd/dist/buildtool.go +++ b/src/cmd/dist/buildtool.go @@ -16,7 +16,6 @@ import ( "os" "path/filepath" "regexp" - "runtime" "strings" ) @@ -239,11 +238,11 @@ var ssaRewriteFileSubstring = filepath.FromSlash("src/cmd/compile/internal/ssa/r // isUnneededSSARewriteFile reports whether srcFile is a // src/cmd/compile/internal/ssa/rewriteARCHNAME.go file for an -// architecture that isn't for the current runtime.GOARCH. +// architecture that isn't for the given GOARCH. // // When unneeded is true archCaps is the rewrite base filename without // the "rewrite" prefix or ".go" suffix: AMD64, 386, ARM, ARM64, etc. -func isUnneededSSARewriteFile(srcFile string) (archCaps string, unneeded bool) { +func isUnneededSSARewriteFile(srcFile, goArch string) (archCaps string, unneeded bool) { if !strings.Contains(srcFile, ssaRewriteFileSubstring) { return "", false } @@ -258,13 +257,10 @@ func isUnneededSSARewriteFile(srcFile string) (archCaps string, unneeded bool) { archCaps = fileArch fileArch = strings.ToLower(fileArch) fileArch = strings.TrimSuffix(fileArch, "splitload") - if fileArch == os.Getenv("GOHOSTARCH") { + if fileArch == goArch { return "", false } - if fileArch == strings.TrimSuffix(runtime.GOARCH, "le") { - return "", false - } - if fileArch == strings.TrimSuffix(os.Getenv("GOARCH"), "le") { + if fileArch == strings.TrimSuffix(goArch, "le") { return "", false } return archCaps, true @@ -273,9 +269,9 @@ func isUnneededSSARewriteFile(srcFile string) (archCaps string, unneeded bool) { func bootstrapRewriteFile(srcFile string) string { // During bootstrap, generate dummy rewrite files for // irrelevant architectures. We only need to build a bootstrap - // binary that works for the current runtime.GOARCH. + // binary that works for the current gohostarch. // This saves 6+ seconds of bootstrap. - if archCaps, ok := isUnneededSSARewriteFile(srcFile); ok { + if archCaps, ok := isUnneededSSARewriteFile(srcFile, gohostarch); ok { return fmt.Sprintf(`// Code generated by go tool dist; DO NOT EDIT. package ssa -- 2.35.1