]> Cypherpunks repositories - gostls13.git/commit
go/types, types2: use max(fileVersion, go1.21) if fileVersion present
authorMichael Matloob <matloob@golang.org>
Fri, 16 Aug 2024 19:13:39 +0000 (15:13 -0400)
committerMichael Matloob <matloob@golang.org>
Tue, 27 Aug 2024 22:37:44 +0000 (22:37 +0000)
commitaeac0b6cbfb42bc9c9301913a191bb09454d316a
tree5ac32b7db7fff83686c1d53a039fb66c2e1c8e2a
parent54fe0fd43fcf8609666c16ae6d15ed92873b1564
go/types, types2: use max(fileVersion, go1.21) if fileVersion present

Change the rules for how //go:build "file versions" are applied: instead
of considering whether a file version is an upgrade or downgrade from
the -lang version, always use max(fileVersion, go1.21). This prevents
file versions from downgrading the version below go1.21.  Before Go 1.21
the //go:build version did not have the meaning of setting the file's
langage version.

This fixes an issue that was appearing in GOPATH builds: Go 1.23.0
started providing -lang versions to the compiler in GOPATH mode (among
other places) which it wasn't doing before, and it set -lang to the
toolchain version (1.23). Because the -lang version was greater than
go1.21, language version used to compile the file would be set to the
//go:build file version. //go:build file versions below 1.21 could cause
files that could previously build to stop building.

For example, take a Go file with a //go:build line specifying go1.10.
If that file used a 1.18 feature, that use would compile fine with a Go
1.22 toolchain. But it would produce an error when compiling with the
1.23.0 toolchain because it set the language version to 1.10 and
disallowed the 1.18 feature. This breaks backwards compatibility: when
the build tag was added, it did not have the meaning of restricting the
language version.

For #68658

Change-Id: I6cedda81a55bcccffaa3501eef9e2be6541b6ece
Reviewed-on: https://go-review.googlesource.com/c/go/+/607955
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Robert Griesemer <gri@google.com>
src/cmd/compile/internal/types2/api_test.go
src/cmd/compile/internal/types2/check.go
src/go/types/api_test.go
src/go/types/check.go
src/internal/types/testdata/check/go1_20_19.go
src/internal/types/testdata/check/go1_21_19.go
src/internal/types/testdata/check/go1_21_22.go [new file with mode: 0644]
src/internal/types/testdata/check/go1_22_21.go [new file with mode: 0644]
src/internal/types/testdata/fixedbugs/issue66285.go
test/fixedbugs/issue63489a.go
test/fixedbugs/issue63489b.go