commit | a0894ea5b5c326f1ddc7c4c6674d5858f8761dc8 | [log] [tgz] |
---|---|---|
author | Matthew Dempsky <mdempsky@google.com> | Thu Sep 26 17:21:50 2019 -0700 |
committer | Matthew Dempsky <mdempsky@google.com> | Mon Oct 07 18:50:14 2019 +0000 |
tree | a31830cdd8398f774fd26a4a502d66d1eda2725f | |
parent | 05a805a6de9c1b49ee1d5d55589a119cae5ab556 [diff] |
cmd/compile: reimplement parameter leak encoding Currently, escape analysis is able to record at most one dereference when a parameter leaks to the heap; that is, at call sites, it can't distinguish between any of these three functions: func x1(p ****int) { sink = *p } func x2(p ****int) { sink = **p } func x3(p ****int) { sink = ***p } Similarly, it's limited to recording parameter leaks to only the first 4 parameters, and only up to 6 dereferences. All of these limitations are due to the awkward encoding scheme used at the moment. This CL replaces the encoding scheme with a simple [8]uint8 array, which can handle up to the first 7 parameters, and up to 254 dereferences, which ought to be enough for anyone. And if not, it's much more easily increased. Shrinks export data size geometric mean for Kubernetes by 0.07%. Fixes #33981. Change-Id: I10a94b9accac9a0c91490e0d6d458316f5ca1e13 Reviewed-on: https://go-review.googlesource.com/c/go/+/197680 Reviewed-by: Cherry Zhang <cherryyz@google.com>
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Official binary distributions are available at https://golang.org/dl/.
After downloading a binary release, visit https://golang.org/doc/install or load doc/install.html in your web browser for installation instructions.
If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source or load doc/install-source.html in your web browser for source installation instructions.
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines: https://golang.org/doc/contribute.html
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.