mirror of
https://github.com/golang/go
synced 2024-11-27 01:11:20 -07:00
aeac0b6cbf
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>
21 lines
598 B
Go
21 lines
598 B
Go
// errorcheck -lang=go1.22
|
|
|
|
// Copyright 2023 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// This file has been changed from its original version as
|
|
// //go:build file versions below 1.21 set the language version to 1.21.
|
|
// The original tested a -lang version of 1.21 with a file version of
|
|
// go1.4 while this new version tests a -lang version of go1.22
|
|
// with a file version of go1.21.
|
|
|
|
//go:build go1.21
|
|
|
|
package p
|
|
|
|
func f() {
|
|
for _ = range 10 { // ERROR "file declares //go:build go1.21"
|
|
}
|
|
}
|