Revert "[release-branch.go1.12] cmd/go: fix the default build output name for versioned binaries"

This reverts commit 746edd459d26f07f69fcb6bddfafaaae7c5a2911 (CL 167384).

Reason for revert: Dmitri identified a potential problem in https://go-review.googlesource.com/c/go/+/140863/11#message-db0ff6bb2c7b06161ca47de771c4465afa8b1102, and we'd like more time to investigate without holding up the 1.12 release branch.

Updates #27283
Updates #30266
Updates #30821

Change-Id: I49d7bbbe200e80b81899c3bcbf7844717af010aa
Reviewed-on: https://go-review.googlesource.com/c/go/+/167617
Reviewed-by: Andrew Bonventre <andybons@golang.org>
diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go
index 187295b..228be07 100644
--- a/src/cmd/go/internal/load/pkg.go
+++ b/src/cmd/go/internal/load/pkg.go
@@ -1178,44 +1178,6 @@
 
 var foldPath = make(map[string]string)
 
-// DefaultExecName returns the default executable name of the given
-// package.
-func DefaultExecName(p *Package) string {
-	_, elem := filepath.Split(p.ImportPath)
-	if cfg.ModulesEnabled {
-		// NOTE(rsc): Using p.ImportPath instead of p.Dir
-		// makes sure we install a package in the root of a
-		// cached module directory as that package name
-		// not name@v1.2.3.
-		// Using p.ImportPath instead of p.Dir
-		// is probably correct all the time,
-		// even for non-module-enabled code,
-		// but I'm not brave enough to change the
-		// non-module behavior this late in the
-		// release cycle. Maybe for Go 1.12.
-		// See golang.org/issue/26869.
-		_, elem = pathpkg.Split(p.ImportPath)
-
-		// If this is example.com/mycmd/v2, it's more useful to install it as mycmd than as v2.
-		// See golang.org/issue/24667.
-		isVersion := func(v string) bool {
-			if len(v) < 2 || v[0] != 'v' || v[1] < '1' || '9' < v[1] {
-				return false
-			}
-			for i := 2; i < len(v); i++ {
-				if c := v[i]; c < '0' || '9' < c {
-					return false
-				}
-			}
-			return true
-		}
-		if isVersion(elem) {
-			_, elem = pathpkg.Split(pathpkg.Dir(p.ImportPath))
-		}
-	}
-	return elem
-}
-
 // load populates p using information from bp, err, which should
 // be the result of calling build.Context.Import.
 func (p *Package) load(stk *ImportStack, bp *build.Package, err error) {
@@ -1256,7 +1218,38 @@
 			p.Error = &PackageError{Err: e}
 			return
 		}
-		elem := DefaultExecName(p)
+		_, elem := filepath.Split(p.Dir)
+		if cfg.ModulesEnabled {
+			// NOTE(rsc): Using p.ImportPath instead of p.Dir
+			// makes sure we install a package in the root of a
+			// cached module directory as that package name
+			// not name@v1.2.3.
+			// Using p.ImportPath instead of p.Dir
+			// is probably correct all the time,
+			// even for non-module-enabled code,
+			// but I'm not brave enough to change the
+			// non-module behavior this late in the
+			// release cycle. Maybe for Go 1.12.
+			// See golang.org/issue/26869.
+			_, elem = pathpkg.Split(p.ImportPath)
+
+			// If this is example.com/mycmd/v2, it's more useful to install it as mycmd than as v2.
+			// See golang.org/issue/24667.
+			isVersion := func(v string) bool {
+				if len(v) < 2 || v[0] != 'v' || v[1] < '1' || '9' < v[1] {
+					return false
+				}
+				for i := 2; i < len(v); i++ {
+					if c := v[i]; c < '0' || '9' < c {
+						return false
+					}
+				}
+				return true
+			}
+			if isVersion(elem) {
+				_, elem = pathpkg.Split(pathpkg.Dir(p.ImportPath))
+			}
+		}
 		full := cfg.BuildContext.GOOS + "_" + cfg.BuildContext.GOARCH + "/" + elem
 		if cfg.BuildContext.GOOS != base.ToolGOOS || cfg.BuildContext.GOARCH != base.ToolGOARCH {
 			// Install cross-compiled binaries to subdirectories of bin.
diff --git a/src/cmd/go/internal/test/test.go b/src/cmd/go/internal/test/test.go
index 2eca627..8dfb3df 100644
--- a/src/cmd/go/internal/test/test.go
+++ b/src/cmd/go/internal/test/test.go
@@ -805,7 +805,7 @@
 	if p.ImportPath == "command-line-arguments" {
 		elem = p.Name
 	} else {
-		elem = load.DefaultExecName(p)
+		_, elem = path.Split(p.ImportPath)
 	}
 	testBinary := elem + ".test"
 
diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go
index d89ee89..145b875 100644
--- a/src/cmd/go/internal/work/build.go
+++ b/src/cmd/go/internal/work/build.go
@@ -10,6 +10,7 @@
 	"go/build"
 	"os"
 	"os/exec"
+	"path"
 	"path/filepath"
 	"runtime"
 	"strings"
@@ -284,7 +285,7 @@
 	pkgs := load.PackagesForBuild(args)
 
 	if len(pkgs) == 1 && pkgs[0].Name == "main" && cfg.BuildO == "" {
-		cfg.BuildO = load.DefaultExecName(pkgs[0])
+		_, cfg.BuildO = path.Split(pkgs[0].ImportPath)
 		cfg.BuildO += cfg.ExeSuffix
 	}
 
diff --git a/src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt b/src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt
index 3acd637..cfa91f0 100644
--- a/src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt
+++ b/src/cmd/go/testdata/mod/rsc.io_fortune_v2_v2.0.0.txt
@@ -13,9 +13,3 @@
 func main() {
 	println(quote.Hello())
 }
--- fortune_test.go --
-package main
-
-import "testing"
-
-func TestFortuneV2(t *testing.T) {}
diff --git a/src/cmd/go/testdata/script/mod_build_versioned.txt b/src/cmd/go/testdata/script/mod_build_versioned.txt
deleted file mode 100644
index eb081c9..0000000
--- a/src/cmd/go/testdata/script/mod_build_versioned.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-env GO111MODULE=on
-
-go get -m rsc.io/fortune/v2
-
-# The default executable name shouldn't be v2$exe
-go build rsc.io/fortune/v2
-! exists v2$exe
-exists fortune$exe
-
-# The default test binary name shouldn't be v2.test$exe
-go test -c rsc.io/fortune/v2
-! exists v2.test$exe
-exists fortune.test$exe
-
--- go.mod --
-module scratch