mirror of https://github.com/golang/go.git
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>
This commit is contained in:
parent
35ef4a9f33
commit
3ea2be1e47
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue