]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile: don't export blank functions in unified IR
authorMatthew Dempsky <mdempsky@google.com>
Wed, 28 Jul 2021 20:17:56 +0000 (13:17 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Wed, 28 Jul 2021 21:45:44 +0000 (21:45 +0000)
After the previous two CLs, there's no need for unified IR to
write/read blank functions anymore: types2 has already checked that
they're valid, and the compiler backend is going to ignore them.

Allows dropping code for worrying about blank methods and will
probably simplify some of the object handling code eventually too.

Fixes #47446.

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

index bf60246d64be290a324bea70508ccec0ed17ec13..7b2285556ed36ed1d4c2c6563304b9010a28d4e0 100644 (file)
@@ -550,25 +550,6 @@ func (w *writer) doObj(obj types2.Object) codeObj {
                assert(ok)
                sig := obj.Type().(*types2.Signature)
 
-               // Rewrite blank methods into blank functions.
-               // They aren't included in the receiver type's method set,
-               // and we still want to write them out to be compiled
-               // for regression tests.
-               // TODO(mdempsky): Change regress tests to avoid relying
-               // on blank functions/methods, so we can just ignore them
-               // altogether.
-               if recv := sig.Recv(); recv != nil {
-                       assert(obj.Name() == "_")
-                       assert(sig.TParams() == nil)
-
-                       params := make([]*types2.Var, 1+sig.Params().Len())
-                       params[0] = recv
-                       for i := 0; i < sig.Params().Len(); i++ {
-                               params[1+i] = sig.Params().At(i)
-                       }
-                       sig = types2.NewSignature(nil, types2.NewTuple(params...), sig.Results(), sig.Variadic())
-               }
-
                w.pos(obj)
                w.typeParamNames(sig.TParams())
                w.signature(sig)
@@ -1683,6 +1664,10 @@ func (w *writer) pkgDecl(decl syntax.Decl) {
                w.pkgObjs(decl.NameList...)
 
        case *syntax.FuncDecl:
+               if decl.Name.Value == "_" {
+                       break // skip blank functions
+               }
+
                obj := w.p.info.Defs[decl.Name].(*types2.Func)
                sig := obj.Type().(*types2.Signature)
 
@@ -1690,7 +1675,7 @@ func (w *writer) pkgDecl(decl syntax.Decl) {
                        break // skip generic functions
                }
 
-               if recv := sig.Recv(); recv != nil && obj.Name() != "_" {
+               if recv := sig.Recv(); recv != nil {
                        w.code(declMethod)
                        w.typ(recvBase(recv))
                        w.selector(obj)