aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2024-05-23 16:30:20 -0700
committerGopher Robot <gobot@golang.org>2024-05-24 13:54:20 +0000
commit3ea2be1e4786abd39bc1fbd429c936d9fb89ec00 (patch)
tree5513d3900d24940dfd670819356390a1124f20ff
parent35ef4a9f330fdff870ff637558ec2fd03a93fd9c (diff)
downloadgo-3ea2be1e4786abd39bc1fbd429c936d9fb89ec00.tar.xz
go/types, types2: pull up Unalias call to cover all of cycleFinder.typ
Without a test because it's unclear the situation can actually occur, but the code is correct because it now mimics the behavior without explicit Alias nodes. For #67547. Change-Id: I21a31af28880ca6d599fe465563d9574c26ed1f1 Reviewed-on: https://go-review.googlesource.com/c/go/+/588117 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com>
-rw-r--r--src/cmd/compile/internal/types2/infer.go5
-rw-r--r--src/go/types/infer.go5
2 files changed, 6 insertions, 4 deletions
diff --git a/src/cmd/compile/internal/types2/infer.go b/src/cmd/compile/internal/types2/infer.go
index 2a46de9b97..122ac9e04f 100644
--- a/src/cmd/compile/internal/types2/infer.go
+++ b/src/cmd/compile/internal/types2/infer.go
@@ -693,6 +693,7 @@ type cycleFinder struct {
}
func (w *cycleFinder) typ(typ Type) {
+ typ = Unalias(typ)
if w.seen[typ] {
// We have seen typ before. If it is one of the type parameters
// in w.tparams, iterative substitution will lead to infinite expansion.
@@ -714,8 +715,8 @@ func (w *cycleFinder) typ(typ Type) {
case *Basic:
// nothing to do
- case *Alias:
- w.typ(Unalias(t))
+ // *Alias:
+ // This case should not occur because of Unalias(typ) at the top.
case *Array:
w.typ(t.elem)
diff --git a/src/go/types/infer.go b/src/go/types/infer.go
index 7e63b0a665..d0f1c1caf4 100644
--- a/src/go/types/infer.go
+++ b/src/go/types/infer.go
@@ -696,6 +696,7 @@ type cycleFinder struct {
}
func (w *cycleFinder) typ(typ Type) {
+ typ = Unalias(typ)
if w.seen[typ] {
// We have seen typ before. If it is one of the type parameters
// in w.tparams, iterative substitution will lead to infinite expansion.
@@ -717,8 +718,8 @@ func (w *cycleFinder) typ(typ Type) {
case *Basic:
// nothing to do
- case *Alias:
- w.typ(Unalias(t))
+ // *Alias:
+ // This case should not occur because of Unalias(typ) at the top.
case *Array:
w.typ(t.elem)