diff options
author | Matthew Dempsky <mdempsky@google.com> | 2019-09-26 17:21:50 -0700 |
---|---|---|
committer | Matthew Dempsky <mdempsky@google.com> | 2019-10-07 18:50:14 +0000 |
commit | a0894ea5b5c326f1ddc7c4c6674d5858f8761dc8 (patch) | |
tree | a31830cdd8398f774fd26a4a502d66d1eda2725f /test/escape_param.go | |
parent | 05a805a6de9c1b49ee1d5d55589a119cae5ab556 (diff) | |
download | go-a0894ea5b5c326f1ddc7c4c6674d5858f8761dc8.tar.gz go-a0894ea5b5c326f1ddc7c4c6674d5858f8761dc8.zip |
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>
Diffstat (limited to 'test/escape_param.go')
-rw-r--r-- | test/escape_param.go | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/test/escape_param.go b/test/escape_param.go index 5e81de9f46..d8fafc53f8 100644 --- a/test/escape_param.go +++ b/test/escape_param.go @@ -205,7 +205,7 @@ func param7(i ***int) { // ERROR "leaking param content: i$" func caller7() { i := 0 // ERROR "moved to heap: i$" - p := &i // ERROR "moved to heap: p$" + p := &i p2 := &p param7(&p2) } |