Skip to content

Commit

Permalink
[release-branch.go1.23] revert "go/types, types2: only use fileVersio…
Browse files Browse the repository at this point in the history
…n if 1.21 or greater"

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>
  • Loading branch information
cagedmantis committed Aug 13, 2024
1 parent 63b0f80 commit ec7d609
Show file tree
Hide file tree
Showing 10 changed files with 22 additions and 87 deletions.
8 changes: 2 additions & 6 deletions src/cmd/compile/internal/types2/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2903,21 +2903,17 @@ func TestFileVersions(t *testing.T) {
{"", "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 != "" {
Expand Down
15 changes: 1 addition & 14 deletions src/cmd/compile/internal/types2/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -354,25 +354,12 @@ func (check *Checker) initFiles(files []*syntax.File) {
// 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
}
}
Expand Down
8 changes: 2 additions & 6 deletions src/go/types/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2909,21 +2909,17 @@ func TestFileVersions(t *testing.T) {
{"", "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 != "" {
Expand Down
15 changes: 1 addition & 14 deletions src/go/types/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -376,25 +376,12 @@ func (check *Checker) initFiles(files []*ast.File) {
// 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
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/internal/types/testdata/check/go1_20_19.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ type Slice []byte
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 */)
2 changes: 1 addition & 1 deletion src/internal/types/testdata/check/go1_21_19.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ type Slice []byte
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" */)
16 changes: 0 additions & 16 deletions src/internal/types/testdata/check/go1_21_22.go

This file was deleted.

16 changes: 0 additions & 16 deletions src/internal/types/testdata/check/go1_22_21.go

This file was deleted.

7 changes: 6 additions & 1 deletion src/internal/types/testdata/fixedbugs/issue66285.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
// -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"
Expand Down
20 changes: 8 additions & 12 deletions test/fixedbugs/issue63489a.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,16 @@
// 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

0 comments on commit ec7d609

Please sign in to comment.