]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.21] Revert "go/types, types2: don't do version checks for embedde...
authorCherry Mui <cherryyz@google.com>
Wed, 13 Mar 2024 18:35:29 +0000 (18:35 +0000)
committerCherry Mui <cherryyz@google.com>
Wed, 13 Mar 2024 19:10:25 +0000 (19:10 +0000)
This reverts CL 571075.

Reason for revert: We might want to do a security-only minor release. Back off the release branch to a clean state from the previous minor release. Sorry for the inconvenience.

Change-Id: Ifc8c7e00e6faea3aa547b883eed44180ddb447de
Reviewed-on: https://go-review.googlesource.com/c/go/+/571355
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Robert Findley <rfindley@google.com>
src/cmd/compile/internal/types2/typeset.go
src/go/types/typeset.go
src/internal/types/testdata/fixedbugs/issue66064.go [deleted file]

index 14039ac9d6184dc1e82015220d72f7ca1f970eae..8d33597ffd90a6b270d8550d233e7d1b61e24ba3 100644 (file)
@@ -255,8 +255,9 @@ func computeInterfaceTypeSet(check *Checker, pos syntax.Pos, ityp *Interface) *_
        allTerms := allTermlist
        allComparable := false
        for i, typ := range ityp.embeddeds {
-               // The embedding position is nil for imported interfaces.
-               // We don't need to do version checks in those cases.
+               // The embedding position is nil for imported interfaces
+               // and also for interface copies after substitution (but
+               // in that case we don't need to report errors again).
                var pos syntax.Pos // embedding position
                if ityp.embedPos != nil {
                        pos = (*ityp.embedPos)[i]
@@ -269,7 +270,7 @@ func computeInterfaceTypeSet(check *Checker, pos syntax.Pos, ityp *Interface) *_
                        assert(!isTypeParam(typ))
                        tset := computeInterfaceTypeSet(check, pos, u)
                        // If typ is local, an error was already reported where typ is specified/defined.
-                       if pos.IsKnown() && check != nil && check.isImportedConstraint(typ) && !check.verifyVersionf(pos, go1_18, "embedding constraint interface %s", typ) {
+                       if check != nil && check.isImportedConstraint(typ) && !check.verifyVersionf(pos, go1_18, "embedding constraint interface %s", typ) {
                                continue
                        }
                        comparable = tset.comparable
@@ -278,7 +279,7 @@ func computeInterfaceTypeSet(check *Checker, pos syntax.Pos, ityp *Interface) *_
                        }
                        terms = tset.terms
                case *Union:
-                       if pos.IsKnown() && check != nil && !check.verifyVersionf(pos, go1_18, "embedding interface element %s", u) {
+                       if check != nil && !check.verifyVersionf(pos, go1_18, "embedding interface element %s", u) {
                                continue
                        }
                        tset := computeUnionTypeSet(check, unionSets, pos, u)
@@ -292,7 +293,7 @@ func computeInterfaceTypeSet(check *Checker, pos syntax.Pos, ityp *Interface) *_
                        if u == Typ[Invalid] {
                                continue
                        }
-                       if pos.IsKnown() && check != nil && !check.verifyVersionf(pos, go1_18, "embedding non-interface type %s", typ) {
+                       if check != nil && !check.verifyVersionf(pos, go1_18, "embedding non-interface type %s", typ) {
                                continue
                        }
                        terms = termlist{{false, typ}}
index a7d4485d0ef7230f706940bc8cf37ca724841d4d..4cd118a2265535f68508ddf3e662d8fc14c398c9 100644 (file)
@@ -253,8 +253,9 @@ func computeInterfaceTypeSet(check *Checker, pos token.Pos, ityp *Interface) *_T
        allTerms := allTermlist
        allComparable := false
        for i, typ := range ityp.embeddeds {
-               // The embedding position is nil for imported interfaces.
-               // We don't need to do version checks in those cases.
+               // The embedding position is nil for imported interfaces
+               // and also for interface copies after substitution (but
+               // in that case we don't need to report errors again).
                var pos token.Pos // embedding position
                if ityp.embedPos != nil {
                        pos = (*ityp.embedPos)[i]
@@ -267,7 +268,7 @@ func computeInterfaceTypeSet(check *Checker, pos token.Pos, ityp *Interface) *_T
                        assert(!isTypeParam(typ))
                        tset := computeInterfaceTypeSet(check, pos, u)
                        // If typ is local, an error was already reported where typ is specified/defined.
-                       if pos.IsValid() && check != nil && check.isImportedConstraint(typ) && !check.verifyVersionf(atPos(pos), go1_18, "embedding constraint interface %s", typ) {
+                       if check != nil && check.isImportedConstraint(typ) && !check.verifyVersionf(atPos(pos), go1_18, "embedding constraint interface %s", typ) {
                                continue
                        }
                        comparable = tset.comparable
@@ -276,7 +277,7 @@ func computeInterfaceTypeSet(check *Checker, pos token.Pos, ityp *Interface) *_T
                        }
                        terms = tset.terms
                case *Union:
-                       if pos.IsValid() && check != nil && !check.verifyVersionf(atPos(pos), go1_18, "embedding interface element %s", u) {
+                       if check != nil && !check.verifyVersionf(atPos(pos), go1_18, "embedding interface element %s", u) {
                                continue
                        }
                        tset := computeUnionTypeSet(check, unionSets, pos, u)
@@ -290,7 +291,7 @@ func computeInterfaceTypeSet(check *Checker, pos token.Pos, ityp *Interface) *_T
                        if u == Typ[Invalid] {
                                continue
                        }
-                       if pos.IsValid() && check != nil && !check.verifyVersionf(atPos(pos), go1_18, "embedding non-interface type %s", typ) {
+                       if check != nil && !check.verifyVersionf(atPos(pos), go1_18, "embedding non-interface type %s", typ) {
                                continue
                        }
                        terms = termlist{{false, typ}}
diff --git a/src/internal/types/testdata/fixedbugs/issue66064.go b/src/internal/types/testdata/fixedbugs/issue66064.go
deleted file mode 100644 (file)
index d4a3617..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-// -lang=go1.16
-
-// 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.
-
-//go:build go1.21
-
-package main
-
-import "slices"
-
-func main() {
-       _ = slices.Clone([]string{}) // no error should be reported here
-}