]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: preserve 'any' type alias in unified IR
authorMatthew Dempsky <mdempsky@google.com>
Wed, 8 Dec 2021 19:12:50 +0000 (11:12 -0800)
committerRuss Cox <rsc@golang.org>
Thu, 9 Dec 2021 19:01:08 +0000 (19:01 +0000)
When exporting the "any" empty interface type for unified IR, write it
out as a reference to the "any" alias, rather than to the underlying
empty interface. This matches how "byte" and "rune" are handled.

Verified to fix the issue demonstrated in CL 369975.

Change-Id: Ic2844b0acc3b17c20b3a40aaf262f62ec653eb5a
Reviewed-on: https://go-review.googlesource.com/c/go/+/370374
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/compile/internal/noder/writer.go

index dde42c85d6ef2618f726e3850ee08230f6968416..2bb0b4d5d750bb01388fe31eb32f9a9d4081e522 100644 (file)
@@ -229,6 +229,8 @@ func (pw *pkgWriter) pkgIdx(pkg *types2.Package) int {
 
 // @@@ Types
 
+var anyTypeName = types2.Universe.Lookup("any").(*types2.TypeName)
+
 func (w *writer) typ(typ types2.Type) {
        w.typInfo(w.p.typIdx(typ, w.dict))
 }
@@ -350,6 +352,12 @@ func (pw *pkgWriter) typIdx(typ types2.Type, dict *writerDict) typeInfo {
                w.structType(typ)
 
        case *types2.Interface:
+               if typ == anyTypeName.Type() {
+                       w.code(typeNamed)
+                       w.obj(anyTypeName, nil)
+                       break
+               }
+
                w.code(typeInterface)
                w.interfaceType(typ)