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>
}
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.
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)
}
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.
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)