diff options
author | Matthew Dempsky <mdempsky@google.com> | 2021-06-22 22:21:09 -0700 |
---|---|---|
committer | Matthew Dempsky <mdempsky@google.com> | 2021-06-23 15:11:06 +0000 |
commit | 70f4ab656575842b3a4ce54960f2c3eb7230e8a6 (patch) | |
tree | 67f4df46a95de012bbe60f4f60d63a49d5906c20 /src/cmd/compile/internal/walk | |
parent | 107b1fce6401b7f5fa12f6e51746a2d0c86b65ca (diff) | |
download | go-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.go | 9 |
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 } |