]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: restore test/nested.go test cases
authorMatthew Dempsky <mdempsky@google.com>
Thu, 18 Aug 2022 18:04:21 +0000 (11:04 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Wed, 7 Dec 2022 03:44:27 +0000 (03:44 +0000)
commitdddc1ba847467524c397eda22b69862773e9f21a
treecb98bef266b51e6ecde8ed1a3a32f8640c84e42e
parent8cd931ff0d4652b333996299d63603c659dbcc6c
cmd/compile: restore test/nested.go test cases

[Re-land of CL 424854, which was reverted as CL 425214.]

When handling a type declaration like:

```
type B A
```

unified IR has been writing out that B's underlying type is A, rather
than the underlying type of A.

This is a bit awkward to implement and adds complexity to importers,
who need to handle resolving the underlying type themselves. But it
was necessary to handle when A was declared like:

```
//go:notinheap
type A int
```

Because we expected A's not-in-heap'ness to be conferred to B, which
required knowing that A was on the path from B to its actual
underlying type int.

However, since #46731 was accepted, we no longer need to support this
case. Instead we can write out B's actual underlying type.

One stumbling point though is the existing code for exporting
interfaces doesn't work for the underlying type of `comparable`, which
is now needed to implement `type C comparable`. As a bit of a hack, we
we instead export its underlying type as `interface{ comparable }`.

Fixes #54512.

Change-Id: I9aa087e0a277527003195ebc7f4fbba6922e788c
Reviewed-on: https://go-review.googlesource.com/c/go/+/455279
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@google.com>
src/cmd/compile/internal/noder/writer.go