]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: simplify bad conversion check
authorKeith Randall <khr@golang.org>
Tue, 24 Aug 2021 21:30:24 +0000 (14:30 -0700)
committerKeith Randall <khr@golang.org>
Tue, 24 Aug 2021 22:10:11 +0000 (22:10 +0000)
Now that we're using OCONVIDATA(x) everywhere we formerly used
OIDATA(OCONVIFACE(x)), there should be no OCONVIFACE operations that
take a shape type.

Change-Id: I4fb056456c60481c6dfe7bc111fca6223567e6a8
Reviewed-on: https://go-review.googlesource.com/c/go/+/344577
Trust: Keith Randall <khr@golang.org>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
src/cmd/compile/internal/noder/stencil.go

index 602e88c102c249f34993b6c3d52e22fcab898c58..18a05060369a38680154a71ec3b555067b4b7d38 100644 (file)
@@ -732,21 +732,15 @@ func (g *irgen) genericSubst(newsym *types.Sym, nameNode *ir.Name, shapes []*typ
        g.instTypeList = append(g.instTypeList, subst.ts.InstTypeList...)
 
        if doubleCheck {
-               okConvs := map[ir.Node]bool{}
                ir.Visit(newf, func(n ir.Node) {
-                       if n.Op() == ir.OIDATA {
-                               // IDATA(OCONVIFACE(x)) is ok, as we don't use the type of x.
-                               // TODO: use some other op besides OCONVIFACE. ONEW might work
-                               // (with appropriate direct vs. indirect interface cases).
-                               okConvs[n.(*ir.UnaryExpr).X] = true
+                       if n.Op() != ir.OCONVIFACE {
+                               return
                        }
-                       if n.Op() == ir.OCONVIFACE && !okConvs[n] {
-                               c := n.(*ir.ConvExpr)
-                               if c.X.Type().HasShape() {
-                                       ir.Dump("BAD FUNCTION", newf)
-                                       ir.Dump("BAD CONVERSION", c)
-                                       base.Fatalf("converting shape type to interface")
-                               }
+                       c := n.(*ir.ConvExpr)
+                       if c.X.Type().HasShape() {
+                               ir.Dump("BAD FUNCTION", newf)
+                               ir.Dump("BAD CONVERSION", c)
+                               base.Fatalf("converting shape type to interface")
                        }
                })
        }