loader: make sure Go version is plumbed through

This fixes the new loop variable behavior in Go 1.22.

Specifically:
  * The compiler (actually, the x/tools/go/ssa package) now correctly
    picks up the Go version.
  * If a module doesn't specify the Go version, the current Go version
    (from the `go` tool and standard library) is used. This fixes
    `go run`.
  * The tests in testdata/ that use a separate directory are now
    actually run in that directory. This makes it possible to use a
    go.mod file there.
  * There is a test to make sure old Go modules still work with the old
    Go behavior, even on a newer Go version.
This commit is contained in:
Ayke van Laethem
2024-01-19 16:57:04 +01:00
committed by Ron Evans
parent 38a80b45d3
commit 57f49af726
10 changed files with 78 additions and 10 deletions
+6 -2
View File
@@ -69,6 +69,7 @@ func TestBuild(t *testing.T) {
"json.go",
"map.go",
"math.go",
"oldgo/",
"print.go",
"reflect.go",
"slice.go",
@@ -91,7 +92,7 @@ func TestBuild(t *testing.T) {
tests = append(tests, "go1.21.go")
}
if minor >= 22 {
tests = append(tests, "go1.22.go")
tests = append(tests, "go1.22/")
}
if *testTarget != "" {
@@ -336,8 +337,11 @@ func runTestWithConfig(name string, t *testing.T, options compileopts.Options, c
path := TESTDATA + "/" + name
// Get the expected output for this test.
txtpath := path[:len(path)-3] + ".txt"
pkgName := "./" + path
if path[len(path)-1] == '/' {
txtpath = path + "out.txt"
options.Directory = path
pkgName = "."
}
expected, err := os.ReadFile(txtpath)
if err != nil {
@@ -351,7 +355,7 @@ func runTestWithConfig(name string, t *testing.T, options compileopts.Options, c
// Build the test binary.
stdout := &bytes.Buffer{}
_, err = buildAndRun("./"+path, config, stdout, cmdArgs, environmentVars, time.Minute, func(cmd *exec.Cmd, result builder.BuildResult) error {
_, err = buildAndRun(pkgName, config, stdout, cmdArgs, environmentVars, time.Minute, func(cmd *exec.Cmd, result builder.BuildResult) error {
return cmd.Run()
})
if err != nil {