]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] cmd/compile: cleanup for concrete types - more
authorRuss Cox <rsc@golang.org>
Fri, 18 Dec 2020 16:29:49 +0000 (11:29 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 21 Dec 2020 19:23:26 +0000 (19:23 +0000)
Accumulated fixes to recent changes, to make the code safe
for automated deinterfacing.

Change-Id: I200737046cea88f3356b2402f09e2ca477fb8456
Reviewed-on: https://go-review.googlesource.com/c/go/+/279232
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/order.go
src/cmd/compile/internal/gc/select.go

index 87d7cf3aa93d1e8bf58d1f98cee157b3e50594a4..7915e4b2f7cfb1aee274612d11be3d5f4dccb9dd 100644 (file)
@@ -892,12 +892,12 @@ func (o *Order) stmt(n ir.Node) {
 
                        case ir.OSELRECV2:
                                // case x, ok = <-c
+                               r := r.(*ir.AssignListStmt)
                                recv := r.Rlist().First().(*ir.UnaryExpr)
                                recv.SetLeft(o.expr(recv.Left(), nil))
                                if recv.Left().Op() != ir.ONAME {
                                        recv.SetLeft(o.copyExpr(recv.Left()))
                                }
-                               r := r.(*ir.AssignListStmt)
                                init := r.PtrInit().Slice()
                                r.PtrInit().Set(nil)
 
@@ -915,13 +915,11 @@ func (o *Order) stmt(n ir.Node) {
                                                if len(init) > 0 && init[0].Op() == ir.ODCL && init[0].(*ir.Decl).Left() == n {
                                                        init = init[1:]
                                                }
-                                               dcl := ir.Nod(ir.ODCL, n, nil)
-                                               dcl = typecheck(dcl, ctxStmt)
+                                               dcl := typecheck(ir.Nod(ir.ODCL, n, nil), ctxStmt)
                                                ncas.PtrInit().Append(dcl)
                                        }
                                        tmp := o.newTemp(t, t.HasPointers())
-                                       as := ir.Nod(ir.OAS, n, conv(tmp, n.Type()))
-                                       as = typecheck(as, ctxStmt)
+                                       as := typecheck(ir.Nod(ir.OAS, n, conv(tmp, n.Type())), ctxStmt)
                                        ncas.PtrInit().Append(as)
                                        r.PtrList().SetIndex(i, tmp)
                                }
index c017b8e29aa3198ee8a4e926e27cd0274fab09c3..974c4b254e7ffc9ec47179fae5fefcf4bb36f453 100644 (file)
@@ -207,8 +207,7 @@ func walkselectcases(cases ir.Nodes) []ir.Node {
                        } else {
                                // TODO(cuonglm): make this use selectnbrecv()
                                // if selectnbrecv2(&v, &received, c) { body } else { default body }
-                               receivedp := ir.Nod(ir.OADDR, n.List().Second(), nil)
-                               receivedp = typecheck(receivedp, ctxExpr)
+                               receivedp := typecheck(nodAddr(n.List().Second()), ctxExpr)
                                call = mkcall1(chanfn("selectnbrecv2", 2, ch.Type()), types.Types[types.TBOOL], r.PtrInit(), elem, receivedp, ch)
                        }
                }
@@ -323,9 +322,11 @@ func walkselectcases(cases ir.Nodes) []ir.Node {
 
                r := ir.Nod(ir.OIF, cond, nil)
 
-               if n := cas.Left(); n != nil && n.Op() == ir.OSELRECV2 && !ir.IsBlank(n.List().Second()) {
-                       x := ir.Nod(ir.OAS, n.List().Second(), recvOK)
-                       r.PtrBody().Append(typecheck(x, ctxStmt))
+               if n := cas.Left(); n != nil && n.Op() == ir.OSELRECV2 {
+                       if !ir.IsBlank(n.List().Second()) {
+                               x := ir.Nod(ir.OAS, n.List().Second(), recvOK)
+                               r.PtrBody().Append(typecheck(x, ctxStmt))
+                       }
                }
 
                r.PtrBody().AppendNodes(cas.PtrBody())