cmd/go: fix error for go run with files in different directories

Fixes #9853.

Change-Id: Ic4803aa499ca20215085a87bad649014984d84c8
Reviewed-on: https://go-review.googlesource.com/12149
Reviewed-by: Rob Pike <r@golang.org>
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go
index c3afa5a..68fdb98 100644
--- a/src/cmd/go/build.go
+++ b/src/cmd/go/build.go
@@ -712,6 +712,9 @@
 			fatalf("%s is a directory, should be a Go file", file)
 		}
 		dir1, _ := filepath.Split(file)
+		if dir1 == "" {
+			dir1 = "."
+		}
 		if dir == "" {
 			dir = dir1
 		} else if dir != dir1 {
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index bb22076..768cf02 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -2055,3 +2055,13 @@
 	tg.runFail("get", "code.google.com/p/rsc-svn")
 	tg.grepStderr("is shutting down", "missed warning about code.google.com")
 }
+
+func TestGoRunDirs(t *testing.T) {
+	tg := testgo(t)
+	defer tg.cleanup()
+	tg.cd("testdata/rundir")
+	tg.runFail("run", "x.go", "sub/sub.go")
+	tg.grepStderr("named files must all be in one directory; have . and sub/", "wrong output")
+	tg.runFail("run", "sub/sub.go", "x.go")
+	tg.grepStderr("named files must all be in one directory; have sub/ and .", "wrong output")
+}
diff --git a/src/cmd/go/testdata/rundir/sub/sub.go b/src/cmd/go/testdata/rundir/sub/sub.go
new file mode 100644
index 0000000..06ab7d0
--- /dev/null
+++ b/src/cmd/go/testdata/rundir/sub/sub.go
@@ -0,0 +1 @@
+package main
diff --git a/src/cmd/go/testdata/rundir/x.go b/src/cmd/go/testdata/rundir/x.go
new file mode 100644
index 0000000..06ab7d0
--- /dev/null
+++ b/src/cmd/go/testdata/rundir/x.go
@@ -0,0 +1 @@
+package main