]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: look for "unknown" when checking supported compiler flags
authorIan Lance Taylor <iant@golang.org>
Fri, 20 Oct 2017 16:51:45 +0000 (09:51 -0700)
committerIan Lance Taylor <iant@golang.org>
Fri, 20 Oct 2017 17:32:35 +0000 (17:32 +0000)
Where GCC says "unrecognized command line option", clang says "unknown
argument". This distinction usually doesn't matter because the
compiler will also exit with a non-zero status, but clang 3.4
reportedly exits with a zero status after reporting an unknown argument.

Change-Id: Ieb69ea352a8de0cd4171a1c26708dfe523421cfa
Reviewed-on: https://go-review.googlesource.com/72151
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
src/cmd/go/internal/work/build.go

index 11e4632815c2aa8615c36bc7c80aa4bde0d5e85a..c7127f6ec8901cf711e489c868ac50546e46e98b 100644 (file)
@@ -3581,7 +3581,9 @@ func (b *Builder) gccSupportsFlag(compiler []string, flag string) bool {
        cmd.Dir = b.WorkDir
        cmd.Env = base.MergeEnvLists([]string{"LC_ALL=C"}, base.EnvForDir(cmd.Dir, os.Environ()))
        out, err := cmd.CombinedOutput()
-       supported := err == nil && !bytes.Contains(out, []byte("unrecognized"))
+       // GCC says "unrecognized command line option".
+       // clang says "unknown argument".
+       supported := err == nil && !bytes.Contains(out, []byte("unrecognized")) && !bytes.Contains(out, []byte("unknown"))
        b.flagCache[key] = supported
        return supported
 }