From 7520c080b45e9493b289d622aed8d8a0da528089 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 19 Jan 2022 18:10:40 -0800 Subject: [PATCH] go/types, types2: in SetUnderlying, set Named.fromRHS if not set yet This is necessary for cycle detection over imported types whose underlying types are set by importers with SetUnderlying. Preparation for fixing issue #48962. Change-Id: I3218cda7feb06440fdb8345c94bcaa5f7d64e94e Reviewed-on: https://go-review.googlesource.com/c/go/+/379694 Trust: Robert Griesemer Run-TryBot: Robert Griesemer Reviewed-by: Robert Findley TryBot-Result: Gopher Robot --- src/cmd/compile/internal/types2/named.go | 3 +++ src/go/types/named.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/cmd/compile/internal/types2/named.go b/src/cmd/compile/internal/types2/named.go index 834a25066b..3ba53052d7 100644 --- a/src/cmd/compile/internal/types2/named.go +++ b/src/cmd/compile/internal/types2/named.go @@ -113,6 +113,9 @@ func (t *Named) SetUnderlying(underlying Type) { panic("underlying type must not be *Named") } t.resolve(nil).underlying = underlying + if t.fromRHS == nil { + t.fromRHS = underlying // for cycle detection + } } // AddMethod adds method m unless it is already in the method list. diff --git a/src/go/types/named.go b/src/go/types/named.go index 6c77146485..f0c22d29e3 100644 --- a/src/go/types/named.go +++ b/src/go/types/named.go @@ -115,6 +115,9 @@ func (t *Named) SetUnderlying(underlying Type) { panic("underlying type must not be *Named") } t.resolve(nil).underlying = underlying + if t.fromRHS == nil { + t.fromRHS = underlying // for cycle detection + } } // AddMethod adds method m unless it is already in the method list. -- 2.48.1