]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: don't generate output for "go build -o /dev/null x.go"
authorIan Lance Taylor <iant@golang.org>
Fri, 25 May 2018 21:27:29 +0000 (14:27 -0700)
committerIan Lance Taylor <iant@golang.org>
Sun, 27 May 2018 07:33:08 +0000 (07:33 +0000)
We look for "-o /dev/null", and, if found, pretend that there was no
"-o" option and don't generate an action to create the final executable.

We look for "go build x.go", and, if found, and if -o was not used,
pretend that the user specified "-o x".

Unfortunately, we were doing those in the wrong order, so that "go
build -o /dev/null x.go" would first clear the "-o" option and then
set it to "-o x".

This CL flips the order so that the right thing happens.

Fixes #25579

Change-Id: Ic9556ac0a57f7b45b685951bc96ba5ea4633b860
Reviewed-on: https://go-review.googlesource.com/114715
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/go/go_test.go
src/cmd/go/internal/work/build.go

index fb8846c710dc9bcee6af8a3d019efc71018ce602..a0fc72aac4af286ac1e0620680f7c00c0f828e20 100644 (file)
@@ -6325,3 +6325,14 @@ func TestCDAndGOPATHAreDifferent(t *testing.T) {
                testCDAndGOPATHAreDifferent(tg, cd, strings.ToLower(gopath))
        }
 }
+
+// Issue 25579.
+func TestGoBuildDashODevNull(t *testing.T) {
+       tg := testgo(t)
+       defer tg.cleanup()
+       tg.parallel()
+       tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
+       tg.run("build", "-o", os.DevNull, filepath.Join(tg.pwd(), "testdata", "src", "hello", "hello.go"))
+       tg.mustNotExist("hello")
+       tg.mustNotExist("hello.exe")
+}
index e5f0e624c3ef90578170bea0320e88ac04e8729b..5cb0c2431f2a832b2f939cae3c09bcacdfcfcbe2 100644 (file)
@@ -284,11 +284,6 @@ func runBuild(cmd *base.Command, args []string) {
                cfg.BuildO += cfg.ExeSuffix
        }
 
-       // Special case -o /dev/null by not writing at all.
-       if cfg.BuildO == os.DevNull {
-               cfg.BuildO = ""
-       }
-
        // sanity check some often mis-used options
        switch cfg.BuildContext.Compiler {
        case "gccgo":
@@ -311,6 +306,11 @@ func runBuild(cmd *base.Command, args []string) {
 
        pkgs = pkgsFilter(load.Packages(args))
 
+       // Special case -o /dev/null by not writing at all.
+       if cfg.BuildO == os.DevNull {
+               cfg.BuildO = ""
+       }
+
        if cfg.BuildO != "" {
                if len(pkgs) > 1 {
                        base.Fatalf("go build: cannot use -o with multiple packages")