mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.regabi] cmd/compile: reimplement capture analysis
Currently we rely on the type-checker to do some basic data-flow analysis to help decide whether function literals should capture variables by value or reference. However, this analysis isn't done by go/types, and escape analysis already has a better framework for doing this more precisely. This CL extends escape analysis to recalculate the same "byval" as CaptureVars and check that it matches. A future CL will remove CaptureVars in favor of escape analysis's calculation. Notably, escape analysis happens after deadcode removes obviously unreachable code, so it sees the AST without any unreachable assignments. (Also without unreachable addrtakens, but ComputeAddrtaken already happens after deadcode too.) There are two test cases where a variable is only reassigned on certain CPUs. This CL changes them to reassign the variables unconditionally (as no-op reassignments that avoid triggering cmd/vet's self-assignment check), at least until we remove CaptureVars. Passes toolstash -cmp. Change-Id: I7162619739fedaf861b478fb8d506f96a6ac21f3 Reviewed-on: https://go-review.googlesource.com/c/go/+/281535 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
parent
fb69c67cad
commit
fd43831f44
4 changed files with 201 additions and 50 deletions
|
|
@ -154,6 +154,7 @@ func s15a8(x *[15]int64) [15]int64 {
|
|||
// On not-amd64, test the host architecture and os
|
||||
arches := []string{runtime.GOARCH}
|
||||
goos0 := runtime.GOOS
|
||||
goos0 = "" + goos0 // TODO(mdempsky): Remove once CaptureVars is gone.
|
||||
if runtime.GOARCH == "amd64" { // Test many things with "linux" (wasm will get "js")
|
||||
arches = []string{"arm", "arm64", "386", "amd64", "mips", "mips64", "ppc64le", "riscv64", "s390x", "wasm"}
|
||||
goos0 = "linux"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue