This reverts commit CL 604935.
Reason for revert: The team has decided that this change will be added to a point release.
Change-Id: I1c1032b881c3a98312a4753b9767cb7c8eed9e09
Reviewed-on: https://go-review.googlesource.com/c/go/+/605096
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
{"", "go1.20", ""}, // file upgrade ignored
{"go1.19", "go1.20", "go1.20"}, // file upgrade permitted
{"go1.20", "go1.19", "go1.20"}, // file downgrade not permitted
- {"go1.21", "go1.20", "go1.21"}, // file downgrade not permitted
- {"go1.22", "go1.21", "go1.21"}, // file downgrade permitted (file and module version are >= go1.21)
+ {"go1.21", "go1.19", "go1.19"}, // file downgrade permitted (module version is >= go1.21)
// versions containing release numbers
// (file versions containing release numbers are considered invalid)
{"go1.19.0", "", "go1.19.0"}, // no file version specified
{"go1.20", "go1.20.1", "go1.20"}, // file upgrade ignored
{"go1.20.1", "go1.20", "go1.20.1"}, // file upgrade ignored
- {"go1.21.0", "go1.21.1", "go1.21.0"}, // file upgrade ignored
- {"go1.21", "go1.21.1", "go1.21"}, // file upgrade ignored
{"go1.20.1", "go1.21", "go1.21"}, // file upgrade permitted
- {"go1.21.1", "go1.21", "go1.21.1"}, // file downgrade ignored
{"go1.20.1", "go1.19", "go1.20.1"}, // file downgrade not permitted
{"go1.21.1", "go1.19.1", "go1.21.1"}, // file downgrade not permitted (invalid file version)
- {"go1.22.1", "go1.21", "go1.21"}, // file downgrade permitted (file and module version is >= go1.21)
+ {"go1.21.1", "go1.19", "go1.19"}, // file downgrade permitted (module version is >= go1.21)
} {
var src string
if test.fileVersion != "" {
// To work around this, downgrades are only allowed when the
// module's Go version is Go 1.21 or later.
//
- // Downgrades are also only allowed to Go versions Go 1.21 or later.
- // In GOPATH mode, there's no way to set a module version and the
- // -lang is set to the local toolchain version to allow the use of
- // new features in GOPATH mode. But //go:build lines added before go1.21
- // weren't intended to downgrade, so code with //go:build lines for
- // go versions earlier than 1.21 may use language features added
- // in later versions and compile.
- //
- // We should probably change the downgradeOk condition to capture this
- // instead of adding an extra condition, but to make the change simpler,
- // we've tried to limit it to one line.
- // TODO(gri): simplify this code after 1.23 has shipped
- //
// If there is no valid check.version, then we don't really know what
// Go version to apply.
// Legacy tools may do this, and they historically have accepted everything.
// Preserve that behavior by ignoring //go:build constraints entirely in that
// case (!pkgVersionOk).
- if cmp > 0 || cmp < 0 && downgradeOk && fileVersion.cmp(go1_21) >= 0 {
+ if cmp > 0 || cmp < 0 && downgradeOk {
v = file.GoVersion
}
}
{"", "go1.20", ""}, // file upgrade ignored
{"go1.19", "go1.20", "go1.20"}, // file upgrade permitted
{"go1.20", "go1.19", "go1.20"}, // file downgrade not permitted
- {"go1.21", "go1.20", "go1.21"}, // file downgrade not permitted
- {"go1.22", "go1.21", "go1.21"}, // file downgrade permitted (file and module version are >= go1.21)
+ {"go1.21", "go1.19", "go1.19"}, // file downgrade permitted (module version is >= go1.21)
// versions containing release numbers
// (file versions containing release numbers are considered invalid)
{"go1.19.0", "", "go1.19.0"}, // no file version specified
{"go1.20", "go1.20.1", "go1.20"}, // file upgrade ignored
{"go1.20.1", "go1.20", "go1.20.1"}, // file upgrade ignored
- {"go1.21.0", "go1.21.1", "go1.21.0"}, // file upgrade ignored
- {"go1.21", "go1.21.1", "go1.21"}, // file upgrade ignored
{"go1.20.1", "go1.21", "go1.21"}, // file upgrade permitted
- {"go1.21.1", "go1.21", "go1.21.1"}, // file downgrade ignored
{"go1.20.1", "go1.19", "go1.20.1"}, // file downgrade not permitted
{"go1.21.1", "go1.19.1", "go1.21.1"}, // file downgrade not permitted (invalid file version)
- {"go1.22.1", "go1.21", "go1.21"}, // file downgrade permitted (file and module version is >= go1.21)
+ {"go1.21.1", "go1.19", "go1.19"}, // file downgrade permitted (module version is >= go1.21)
} {
var src string
if test.fileVersion != "" {
// To work around this, downgrades are only allowed when the
// module's Go version is Go 1.21 or later.
//
- // Downgrades are also only allowed to Go versions Go 1.21 or later.
- // In GOPATH mode, there's no way to set a module version and the
- // -lang is set to the local toolchain version to allow the use of
- // new features in GOPATH mode. But //go:build lines added before go1.21
- // weren't intended to downgrade, so code with //go:build lines for
- // go versions earlier than 1.21 may use language features added
- // in later versions and compile.
- //
- // We should probably change the downgradeOk condition to capture this
- // instead of adding an extra condition, but to make the change simpler,
- // we've tried to limit it to one line.
- // TODO(gri): simplify this code after 1.23 has shipped
- //
// If there is no valid check.version, then we don't really know what
// Go version to apply.
// Legacy tools may do this, and they historically have accepted everything.
// Preserve that behavior by ignoring //go:build constraints entirely in that
// case (!pkgVersionOk).
- if cmp > 0 || cmp < 0 && downgradeOk && fileVersion.cmp(go1_21) >= 0 {
+ if cmp > 0 || cmp < 0 && downgradeOk {
v = file.GoVersion
}
}
type Array [8]byte
var s Slice
-var p = (Array)(s /* ok because downgrades below 1.21 are ignored */)
+var p = (Array)(s /* ok because Go 1.20 ignored the //go:build go1.19 */)
type Array [8]byte
var s Slice
-var p = (Array)(s /* ok because downgrades below 1.21 are ignored */)
+var p = (Array)(s /* ERROR "requires go1.20 or later" */)
+++ /dev/null
-// -lang=go1.21
-
-// Copyright 2022 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.
-
-// Check Go language version-specific errors.
-
-//go:build go1.22
-
-package p
-
-func f() {
- for _ = range /* ok because of upgrade to 1.22 */ 10 {
- }
-}
\ No newline at end of file
+++ /dev/null
-// -lang=go1.22
-
-// Copyright 2024 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.
-
-// Check Go language version-specific errors.
-
-//go:build go1.21
-
-package p
-
-func f() {
- for _ = range 10 /* ERROR "requires go1.22 or later" */ {
- }
-}
\ No newline at end of file
-// -lang=go1.13
+// -lang=go1.21
// Copyright 2024 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.
+// Note: Downgrading to go1.13 requires at least go1.21,
+// hence the need for -lang=go1.21 at the top.
+
+//go:build go1.13
+
package p
import "io"
-// errorcheck -lang=go1.22
+// errorcheck -lang=go1.21
// 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 language downgrades below go1.21 are no longer
-// supported. The original tested a downgrade from go1.21 to
-// go1.4 while this new version tests a downgrade from go1.22
-// to go1.21
-
-//go:build go1.21
+//go:build go1.4
package p
-func f() {
- for _ = range 10 { // ERROR "file declares //go:build go1.21"
- }
-}
+const c = 0o123 // ERROR "file declares //go:build go1.4"
+
+// ERROR "file declares //go:build go1.4"
+
+//line issue63489a.go:13:1
+const d = 0o124