mirror of
https://github.com/golang/go
synced 2024-11-23 15:20:03 -07:00
cmd/go: use temporary file for output of gcc command on Windows
On Windows, some of gcc command (like msys2 native) output NUL as a file. Fixes #36000 Change-Id: I02c632fa2d710a011d79f24d5beee4bc57ad994e Reviewed-on: https://go-review.googlesource.com/c/go/+/233977 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
daf70d6c16
commit
aeab403174
@ -2434,13 +2434,25 @@ func (b *Builder) gccSupportsFlag(compiler []string, flag string) bool {
|
||||
if b.flagCache == nil {
|
||||
b.flagCache = make(map[[2]string]bool)
|
||||
}
|
||||
|
||||
tmp := os.DevNull
|
||||
if runtime.GOOS == "windows" {
|
||||
f, err := ioutil.TempFile(b.WorkDir, "")
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
f.Close()
|
||||
tmp = f.Name()
|
||||
defer os.Remove(tmp)
|
||||
}
|
||||
|
||||
// We used to write an empty C file, but that gets complicated with
|
||||
// go build -n. We tried using a file that does not exist, but that
|
||||
// fails on systems with GCC version 4.2.1; that is the last GPLv2
|
||||
// version of GCC, so some systems have frozen on it.
|
||||
// Now we pass an empty file on stdin, which should work at least for
|
||||
// GCC and clang.
|
||||
cmdArgs := str.StringList(compiler, flag, "-c", "-x", "c", "-", "-o", os.DevNull)
|
||||
cmdArgs := str.StringList(compiler, flag, "-c", "-x", "c", "-", "-o", tmp)
|
||||
if cfg.BuildN || cfg.BuildX {
|
||||
b.Showcmd(b.WorkDir, "%s || true", joinUnambiguously(cmdArgs))
|
||||
if cfg.BuildN {
|
||||
|
6
src/cmd/go/testdata/script/issue36000.txt
vendored
Normal file
6
src/cmd/go/testdata/script/issue36000.txt
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
# Tests golang.org/issue/36000
|
||||
|
||||
[!cgo] skip
|
||||
|
||||
# go env with CGO flags should not make NUL file
|
||||
go env CGO_CFLAGS
|
Loading…
Reference in New Issue
Block a user