aboutsummaryrefslogtreecommitdiff
path: root/test/escape2n.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-02-19 17:54:55 +0300
committerDmitry Vyukov <dvyukov@google.com>2015-03-28 13:07:19 +0000
commit1f5617e37c9078dbe082151c9e17d5dc900cb5a0 (patch)
treee796ebebf17d68c790ecf31e4bfc2510d21aea7f /test/escape2n.go
parentc61d86af72e2323c32ba2c12528866ecc2264bb3 (diff)
downloadgo-1f5617e37c9078dbe082151c9e17d5dc900cb5a0.tar.gz
go-1f5617e37c9078dbe082151c9e17d5dc900cb5a0.zip
test: add additional ... tests for escape analysis
False positives (var incorrectly escapes) are marked with BAD. Change-Id: I646a29ffe24d963c63db09cba81dbc101d7c7242 Reviewed-on: https://go-review.googlesource.com/5296 Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'test/escape2n.go')
-rw-r--r--test/escape2n.go24
1 files changed, 22 insertions, 2 deletions
diff --git a/test/escape2n.go b/test/escape2n.go
index e9dd7b984e..5e58537111 100644
--- a/test/escape2n.go
+++ b/test/escape2n.go
@@ -610,11 +610,11 @@ func foo74c() {
}
}
-func myprint(y *int, x ...interface{}) *int { // ERROR "x does not escape" "leaking param: y"
+func myprint(y *int, x ...interface{}) *int { // ERROR "x does not escape" "leaking param: y to result ~r2"
return y
}
-func myprint1(y *int, x ...interface{}) *interface{} { // ERROR "y does not escape" "leaking param: x"
+func myprint1(y *int, x ...interface{}) *interface{} { // ERROR "y does not escape" "leaking param: x to result ~r2"
return &x[0] // ERROR "&x.0. escapes to heap"
}
@@ -635,10 +635,16 @@ func foo75aesc(z *int) { // ERROR "z does not escape"
*ppi = myprint1(z, 1, 2, 3) // ERROR "[.][.][.] argument escapes to heap"
}
+func foo75aesc1(z *int) { // ERROR "z does not escape"
+ sink = myprint1(z, 1, 2, 3) // ERROR "[.][.][.] argument escapes to heap"
+}
+
+// BAD: z does not escape here
func foo76(z *int) { // ERROR "leaking param: z"
myprint(nil, z) // ERROR "[.][.][.] argument does not escape"
}
+// BAD: z does not escape here
func foo76a(z *int) { // ERROR "leaking param: z"
myprint1(nil, z) // ERROR "[.][.][.] argument does not escape"
}
@@ -685,6 +691,20 @@ func foo77b(z []interface{}) { // ERROR "leaking param: z"
*ppi = myprint1(nil, z...)
}
+func foo77c(z []interface{}) { // ERROR "leaking param: z"
+ sink = myprint1(nil, z...)
+}
+
+func dotdotdot() {
+ // BAD: i should not escape here
+ i := 0 // ERROR "moved to heap: i"
+ myprint(nil, &i) // ERROR "&i escapes to heap" "\.\.\. argument does not escape"
+
+ // BAD: j should not escape here
+ j := 0 // ERROR "moved to heap: j"
+ myprint1(nil, &j) // ERROR "&j escapes to heap" "\.\.\. argument does not escape"
+}
+
func foo78(z int) *int { // ERROR "moved to heap: z"
return &z // ERROR "&z escapes to heap"
}