This libgo patch forces LANG=C when looking for the version of the C compiler. Tested by installing the gcc-locales package and running LANG=de_DE.utf8 go build hello.go Without this change, that fails, as described at GCC PR 84765.
Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline. Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 258392) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -ce28919112dbb234366816ab39ce060ad45e8ca9 +e4464efc767b8dee4f4c18ffaf6c891f7b9deee7 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: libgo/go/cmd/go/internal/work/buildid.go =================================================================== --- libgo/go/cmd/go/internal/work/buildid.go (revision 257914) +++ libgo/go/cmd/go/internal/work/buildid.go (working copy) @@ -234,7 +234,18 @@ func (b *Builder) gccgoToolID(name, lang // compile an empty file on standard input. cmdline := str.StringList(cfg.BuildToolexec, name, "-###", "-x", language, "-c", "-") cmd := exec.Command(cmdline[0], cmdline[1:]...) - cmd.Env = base.EnvForDir(cmd.Dir, os.Environ()) + + // Strip any LANG or LC_ environment variables, and force + // LANG=C, so that we get the untranslated output. + var env []string + for _, e := range os.Environ() { + if !strings.HasPrefix(e, "LANG=") && !strings.HasPrefix(e, "LC_") { + env = append(env, e) + } + } + env = append(env, "LANG=C") + + cmd.Env = base.EnvForDir(cmd.Dir, env) out, err := cmd.CombinedOutput() if err != nil { return "", fmt.Errorf("%s: %v; output: %q", name, err, out)