]> Cypherpunks repositories - gostls13.git/commit
go/types: don't skip defined types when reporting cycles
authorRobert Griesemer <gri@golang.org>
Tue, 8 Oct 2019 22:45:14 +0000 (15:45 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 8 Oct 2019 23:32:42 +0000 (23:32 +0000)
commit5650a53dac73703a1bc095a277a194813519001f
treee3bdfd7078397dfce5e0d56aa1c55247033efc18
parentce83f41fed32bfc7826ec0cd7756a34594f8746b
go/types: don't skip defined types when reporting cycles

The newly introduced "late-stage" cycle detection for types
(https://golang.org/cl/196338/) "skips" named types on the
RHS of a type declaration when reporting a cycle. For instance,
for:

type (
   A B
   B [10]C
   C A
)

the reported cycle is:

illegal cycle in declaration of C
       C refers to
       C

because the underlying type of C resolves to [10]C (note that
cmd/compile does the same but simply says invalid recursive
type C).

This CL introduces the Named.orig field which always refers
to the RHS type in a type definition (and is never changed).
By using Named.orig rather than Named.underlying for the type
validity check, the cycle as written in the source code is
reported:

  illegal cycle in declaration of A
         A refers to
         B refers to
         C refers to
         A

Fixes #34771.

Change-Id: I41e260ceb3f9a15da87ffae6a3921bd8280e2ac4
Reviewed-on: https://go-review.googlesource.com/c/go/+/199937
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/go/types/decl.go
src/go/types/testdata/cycles.src
src/go/types/type.go