mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 19:43:44 +00:00
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:
committed by
Ron Evans
parent
38a80b45d3
commit
57f49af726
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
module github.com/tinygo-org/tinygo/testdata/go1.22
|
||||
|
||||
go 1.22
|
||||
+4
-6
@@ -19,15 +19,13 @@ func testLoopVar() {
|
||||
f = func() int { return i }
|
||||
}
|
||||
}
|
||||
// Prints 1 in Go 1.21, or 0 in Go 1.22.
|
||||
// TODO: this still prints Go 1.21 even in Go 1.22. We probably need to
|
||||
// specify the Go version somewhere.
|
||||
// Variable n is 1 in Go 1.21, or 0 in Go 1.22.
|
||||
n := f()
|
||||
if n == 0 {
|
||||
println("behaves like Go 1.22")
|
||||
println("loops behave like Go 1.22")
|
||||
} else if n == 1 {
|
||||
println("behaves like Go 1.21")
|
||||
println("loops behave like Go 1.21")
|
||||
} else {
|
||||
println("unknown behavior")
|
||||
println("unknown loop behavior")
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -9,4 +9,4 @@
|
||||
2
|
||||
1
|
||||
go1.22 has lift-off!
|
||||
behaves like Go 1.21
|
||||
loops behave like Go 1.22
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
module github.com/tinygo-org/tinygo/testdata/oldgo
|
||||
|
||||
// Go version doesn't matter much, as long as it's old.
|
||||
|
||||
go 1.15
|
||||
Vendored
+26
@@ -0,0 +1,26 @@
|
||||
package main
|
||||
|
||||
// This package verifies that the Go language version is correctly picked up
|
||||
// from the go.mod file.
|
||||
|
||||
func main() {
|
||||
testLoopVar()
|
||||
}
|
||||
|
||||
func testLoopVar() {
|
||||
var f func() int
|
||||
for i := 0; i < 1; i++ {
|
||||
if i == 0 {
|
||||
f = func() int { return i }
|
||||
}
|
||||
}
|
||||
// Variable n is 1 in Go 1.21, or 0 in Go 1.22.
|
||||
n := f()
|
||||
if n == 0 {
|
||||
println("loops behave like Go 1.22")
|
||||
} else if n == 1 {
|
||||
println("loops behave like Go 1.21")
|
||||
} else {
|
||||
println("unknown loop behavior")
|
||||
}
|
||||
}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
loops behave like Go 1.21
|
||||
Reference in New Issue
Block a user