diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index c58abdf6a5..86423f118c 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -393,6 +393,7 @@ func runBuild(ctx context.Context, cmd *base.Command, args []string) { // write all main packages to that directory. // Otherwise require only a single package be built. if fi, err := os.Stat(cfg.BuildO); (err == nil && fi.IsDir()) || + strings.HasSuffix(cfg.BuildO, "/") || strings.HasSuffix(cfg.BuildO, string(os.PathSeparator)) { if !explicitO { base.Fatalf("go build: build output %q already exists and is a directory", cfg.BuildO) diff --git a/src/cmd/go/testdata/script/build_output.txt b/src/cmd/go/testdata/script/build_output.txt index ddf8f149bc..5068f4821e 100644 --- a/src/cmd/go/testdata/script/build_output.txt +++ b/src/cmd/go/testdata/script/build_output.txt @@ -25,13 +25,23 @@ rm bin ! exists bin go build -o bin/ x.go -exists -exec bin/x +exists -exec bin/x$GOEXE rm bin +[windows] ! exists bin +[windows] go build -o bin\x x.go +[windows] exists -exec bin\x +[windows] rm bin + +[windows] ! exists bin +[windows] go build -o bin\ x.go +[windows] exists -exec bin\x.exe +[windows] rm bin + ! exists bin mkdir bin go build -o bin x.go -exists -exec bin/x +exists -exec bin/x$GOEXE rm bin go build p.go