]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile: get runtime stuff working
authorKeith Randall <khr@golang.org>
Tue, 20 Jul 2021 22:02:01 +0000 (15:02 -0700)
committerKeith Randall <khr@golang.org>
Wed, 21 Jul 2021 21:06:02 +0000 (21:06 +0000)
Remaining stuff from Dan's CL 335412 to get tests passing.

 - Removed PTRLIT case in node() that was added with the gcshape change.
   I don't think it is needed anymore.

 - Modified (*itab).init() to add an irrelevant pointer (the itab
   itself) for the '==' entry of interfaces with 'comparable'. That
   entry is not used, so we just want to avoid the error that the given
   type doesn't actually have an '==' method.

Change-Id: I9b2d4c8342c0b2048d76e003d95023f4ccd559f5
Reviewed-on: https://go-review.googlesource.com/c/go/+/336149
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
Trust: Dan Scales <danscales@google.com>
Trust: Keith Randall <khr@golang.org>

src/cmd/compile/internal/noder/stencil.go
src/runtime/iface.go

index 460d926a0d64ec6ed500e99319c1a8c18b2400c6..cff36dd3bf202581c69f52c57723aae45057f188 100644 (file)
@@ -1394,11 +1394,6 @@ func (subst *subster) node(n ir.Node) ir.Node {
                        // TODO: need to modify m.X? I don't think any downstream passes use it.
                        m.SetType(subst.unshapifyTyp(m.Type()))
 
-               case ir.OPTRLIT:
-                       m := m.(*ir.AddrExpr)
-                       // Walk uses the type of the argument of ptrlit. Also could be a shape type?
-                       m.X.SetType(subst.unshapifyTyp(m.X.Type()))
-
                case ir.OMETHEXPR:
                        se := m.(*ir.SelectorExpr)
                        se.X = ir.TypeNodeAt(se.X.Pos(), subst.unshapifyTyp(se.X.Type()))
index 79a49c0dffb7d4db7505afee7f80f6f9a26559e7..71bd2d2f07207eec6ee4f4e6dcaadcc770322236 100644 (file)
@@ -214,6 +214,16 @@ imethods:
                if ipkg == "" {
                        ipkg = inter.pkgpath.name()
                }
+               if iname == "==" {
+                       // Don't need '==' method right now (from comparable),
+                       // just fill in with a random pointer for now.
+                       if k == 0 {
+                               fun0 = unsafe.Pointer(m)
+                       } else {
+                               methods[k] = unsafe.Pointer(m)
+                       }
+                       continue imethods
+               }
                for ; j < nt; j++ {
                        t := &xmhdr[j]
                        tname := typ.nameOff(t.name)