[dev.typeparams] cmd/compile: remove CallExpr.PreserveClosure

This flag is only needed to prevent the directClosureCall optimization
in walkCall, when called for walkGoDefer. But walkGoDefer don't need
to call walkCall: at this point in the compile, the call expression
isn't a real call anymore.

Instead, we just need to walkExpr on the function expression.

Change-Id: I8a5176cfe1bff53700cbd21ed1b479ebd9a839ad
Reviewed-on: https://go-review.googlesource.com/c/go/+/330271
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Trust: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
Matthew Dempsky 2021-06-22 20:37:42 -07:00
parent e59a19cceb
commit 1a445dab66
4 changed files with 10 additions and 21 deletions

View file

@ -37,14 +37,6 @@ func directClosureCall(n *ir.CallExpr) {
return // leave for walkClosure to handle
}
// If wrapGoDefer() in the order phase has flagged this call,
// avoid eliminating the closure even if there is a direct call to
// (the closure is needed to simplify the register ABI). See
// wrapGoDefer for more details.
if n.PreserveClosure {
return
}
// We are going to insert captured variables before input args.
var params []*types.Field
var decls []*ir.Name