aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/walk
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2021-06-22 22:21:09 -0700
committerMatthew Dempsky <mdempsky@google.com>2021-06-23 15:11:06 +0000
commit70f4ab656575842b3a4ce54960f2c3eb7230e8a6 (patch)
tree67f4df46a95de012bbe60f4f60d63a49d5906c20 /src/cmd/compile/internal/walk
parent107b1fce6401b7f5fa12f6e51746a2d0c86b65ca (diff)
downloadgo-70f4ab656575842b3a4ce54960f2c3eb7230e8a6.tar.gz
go-70f4ab656575842b3a4ce54960f2c3eb7230e8a6.zip
[dev.typeparams] cmd/compile: remove SetClosureCalled(false) hacks
The current go/defer wrapping code goes to some length to clear ClosureCalled when a function call will end up not being called directly, and so it will need to use the context register. But we already have a flag to indicate we need to use the context register: Needctxt. The real issue here is just that buildssa was using fn.ClosureCalled instead of fn.Needctxt. Change-Id: Ic9f5f23b66eb467fc61fa84eacb45d46c54133d2 Reviewed-on: https://go-review.googlesource.com/c/go/+/330329 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Diffstat (limited to 'src/cmd/compile/internal/walk')
-rw-r--r--src/cmd/compile/internal/walk/order.go9
1 files changed, 0 insertions, 9 deletions
diff --git a/src/cmd/compile/internal/walk/order.go b/src/cmd/compile/internal/walk/order.go
index c24f80508a..75657cd3e4 100644
--- a/src/cmd/compile/internal/walk/order.go
+++ b/src/cmd/compile/internal/walk/order.go
@@ -1566,7 +1566,6 @@ func (o *orderState) wrapGoDefer(n *ir.GoDeferStmt) {
if len(callArgs) == 0 && call.Op() == ir.OCALLFUNC && callX.Type().NumResults() == 0 {
if callX.Op() == ir.OCLOSURE {
clo := callX.(*ir.ClosureExpr)
- clo.Func.SetClosureCalled(false)
clo.IsGoWrap = true
}
return
@@ -1691,12 +1690,6 @@ func (o *orderState) wrapGoDefer(n *ir.GoDeferStmt) {
// Deal with "defer returnsafunc()(x, y)" (for
// example) by copying the callee expression.
fnExpr = mkArgCopy(callX)
- if callX.Op() == ir.OCLOSURE {
- // For "defer func(...)", in addition to copying the
- // closure into a temp, mark it as no longer directly
- // called.
- callX.(*ir.ClosureExpr).Func.SetClosureCalled(false)
- }
}
}
@@ -1770,8 +1763,6 @@ func (o *orderState) wrapGoDefer(n *ir.GoDeferStmt) {
topcall := ir.NewCallExpr(n.Pos(), ir.OCALL, clo, nil)
typecheck.Call(topcall)
- fn.SetClosureCalled(false)
-
// Finally, point the defer statement at the newly generated call.
n.Call = topcall
}