aboutsummaryrefslogtreecommitdiff
path: root/test/escape_param.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2019-09-26 17:21:50 -0700
committerMatthew Dempsky <mdempsky@google.com>2019-10-07 18:50:14 +0000
commita0894ea5b5c326f1ddc7c4c6674d5858f8761dc8 (patch)
treea31830cdd8398f774fd26a4a502d66d1eda2725f /test/escape_param.go
parent05a805a6de9c1b49ee1d5d55589a119cae5ab556 (diff)
downloadgo-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.go2
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)
}